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,9 +6,10 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bigone import ImplicitAPI
8
8
  import asyncio
9
- from ccxt.base.types import Balances, Bool, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Bool, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
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 PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -17,7 +18,6 @@ from ccxt.base.errors import InsufficientFunds
17
18
  from ccxt.base.errors import InvalidOrder
18
19
  from ccxt.base.errors import NotSupported
19
20
  from ccxt.base.errors import RateLimitExceeded
20
- from ccxt.base.errors import AuthenticationError
21
21
  from ccxt.base.decimal_to_precision import TICK_SIZE
22
22
  from ccxt.base.precise import Precise
23
23
 
@@ -30,7 +30,7 @@ class bigone(Exchange, ImplicitAPI):
30
30
  'name': 'BigONE',
31
31
  'countries': ['CN'],
32
32
  'version': 'v3',
33
- 'rateLimit': 1200, # 500 request per 10 minutes
33
+ 'rateLimit': 20, # 500 requests per 10 seconds
34
34
  'has': {
35
35
  'CORS': None,
36
36
  'spot': True,
@@ -52,8 +52,13 @@ class bigone(Exchange, ImplicitAPI):
52
52
  'fetchClosedOrders': True,
53
53
  'fetchCurrencies': True,
54
54
  'fetchDepositAddress': True,
55
+ 'fetchDepositAddresses': False,
56
+ 'fetchDepositAddressesByNetwork': False,
55
57
  'fetchDeposits': True,
58
+ 'fetchFundingHistory': False,
56
59
  'fetchFundingRate': False,
60
+ 'fetchFundingRateHistory': False,
61
+ 'fetchFundingRates': False,
57
62
  'fetchMarkets': True,
58
63
  'fetchMyTrades': True,
59
64
  'fetchOHLCV': True,
@@ -88,7 +93,7 @@ class bigone(Exchange, ImplicitAPI):
88
93
  },
89
94
  'hostname': 'big.one', # or 'bigone.com'
90
95
  'urls': {
91
- 'logo': 'https://user-images.githubusercontent.com/1294454/69354403-1d532180-0c91-11ea-88ed-44c06cefdf87.jpg',
96
+ 'logo': 'https://github.com/user-attachments/assets/4e5cfd53-98cc-4b90-92cd-0d7b512653d1',
92
97
  'api': {
93
98
  'public': 'https://{hostname}/api/v3',
94
99
  'private': 'https://{hostname}/api/v3/viewer',
@@ -168,7 +173,7 @@ class bigone(Exchange, ImplicitAPI):
168
173
  },
169
174
  'webExchange': {
170
175
  'get': [
171
- 'uc/v2/assets',
176
+ 'v3/assets',
172
177
  ],
173
178
  },
174
179
  },
@@ -301,6 +306,105 @@ class bigone(Exchange, ImplicitAPI):
301
306
  # undetermined: XinFin, YAS, Ycash
302
307
  },
303
308
  },
309
+ 'features': {
310
+ 'default': {
311
+ 'sandbox': False,
312
+ 'createOrder': {
313
+ 'marginMode': False,
314
+ 'triggerPrice': True,
315
+ 'triggerPriceType': None,
316
+ 'triggerDirection': True, # todo implement
317
+ 'stopLossPrice': False, # todo by trigger
318
+ 'takeProfitPrice': False, # todo by trigger
319
+ 'attachedStopLossTakeProfit': None,
320
+ 'timeInForce': {
321
+ 'IOC': True,
322
+ 'FOK': False,
323
+ 'PO': True,
324
+ 'GTD': False,
325
+ },
326
+ 'hedged': False,
327
+ 'trailing': False,
328
+ 'leverage': False,
329
+ 'marketBuyRequiresPrice': True,
330
+ 'marketBuyByCost': True,
331
+ 'selfTradePrevention': False,
332
+ 'iceberg': False,
333
+ },
334
+ 'createOrders': None, # todo: implement
335
+ 'fetchMyTrades': {
336
+ 'marginMode': False,
337
+ 'limit': 200,
338
+ 'daysBack': None,
339
+ 'untilDays': None,
340
+ },
341
+ 'fetchOrder': {
342
+ 'marginMode': False,
343
+ 'trigger': False,
344
+ 'trailing': False,
345
+ },
346
+ 'fetchOpenOrders': {
347
+ 'marginMode': False,
348
+ 'limit': 200,
349
+ 'trigger': False,
350
+ 'trailing': False,
351
+ },
352
+ 'fetchOrders': {
353
+ 'marginMode': False,
354
+ 'limit': 200,
355
+ 'daysBack': None,
356
+ 'untilDays': None,
357
+ 'trigger': False,
358
+ 'trailing': False,
359
+ },
360
+ 'fetchClosedOrders': {
361
+ 'marginMode': False,
362
+ 'limit': 200,
363
+ 'daysBack': None,
364
+ 'daysBackCanceled': None,
365
+ 'untilDays': None,
366
+ 'trigger': False,
367
+ 'trailing': False,
368
+ },
369
+ 'fetchOHLCV': {
370
+ 'limit': 500,
371
+ },
372
+ },
373
+ 'spot': {
374
+ 'extends': 'default',
375
+ },
376
+ 'forDerivatives': {
377
+ 'extends': 'default',
378
+ 'createOrder': {
379
+ # todo: implement
380
+ 'triggerPriceType': {
381
+ 'mark': True,
382
+ 'index': True,
383
+ 'last': True,
384
+ },
385
+ },
386
+ 'fetchOrders': {
387
+ 'daysBack': 100000,
388
+ 'untilDays': 100000,
389
+ },
390
+ 'fetchClosedOrders': {
391
+ 'daysBack': 100000,
392
+ 'untilDays': 100000,
393
+ },
394
+ },
395
+ 'swap': {
396
+ 'linear': {
397
+ 'extends': 'forDerivatives',
398
+ },
399
+ 'inverse': {
400
+ 'extends': 'forDerivatives',
401
+ },
402
+ },
403
+ 'future': {
404
+ 'linear': None,
405
+ 'inverse': None,
406
+ },
407
+ },
304
408
  'precisionMode': TICK_SIZE,
305
409
  'exceptions': {
306
410
  'exact': {
@@ -340,14 +444,14 @@ class bigone(Exchange, ImplicitAPI):
340
444
  },
341
445
  })
342
446
 
343
- async def fetch_currencies(self, params={}):
447
+ async def fetch_currencies(self, params={}) -> Currencies:
344
448
  """
345
449
  fetches all available currencies on an exchange
346
450
  :param dict [params]: extra parameters specific to the exchange API endpoint
347
451
  :returns dict: an associative dictionary of currencies
348
452
  """
349
453
  # we use undocumented link(possible, less informative alternative is : https://big.one/api/uc/v3/assets/accounts)
350
- data = await self.fetch_web_endpoint('fetchCurrencies', 'webExchangeGetUcV2Assets', True)
454
+ data = await self.fetch_web_endpoint('fetchCurrencies', 'webExchangeGetV3Assets', True)
351
455
  if data is None:
352
456
  return None
353
457
  #
@@ -356,105 +460,54 @@ class bigone(Exchange, ImplicitAPI):
356
460
  # "message": "",
357
461
  # "data": [
358
462
  # {
359
- # "name": "TetherUS",
360
- # "symbol": "USDT",
361
- # "contract_address": "31",
362
- # "is_deposit_enabled": True,
363
- # "is_withdrawal_enabled": True,
364
- # "is_stub": False,
365
- # "withdrawal_fee": "5.0",
366
- # "is_fiat": False,
367
- # "is_memo_required": False,
368
- # "logo": {
369
- # "default": "https://assets.peatio.com/assets/v1/color/normal/usdt.png",
370
- # "white": "https://assets.peatio.com/assets/v1/white/normal/usdt.png",
463
+ # "uuid": "17082d1c-0195-4fb6-8779-2cdbcb9eeb3c",
464
+ # "symbol": "USDT",
465
+ # "name": "TetherUS",
466
+ # "scale": 12,
467
+ # "is_fiat": False,
468
+ # "is_transfer_enabled": True,
469
+ # "transfer_scale": 12,
470
+ # "binding_gateways": [
471
+ # {
472
+ # "guid": "07efc37f-d1ec-4bc9-8339-a745256ea2ba",
473
+ # "is_deposit_enabled": True,
474
+ # "gateway_name": "Ethereum",
475
+ # "min_withdrawal_amount": "0.000001",
476
+ # "withdrawal_fee": "5.71",
477
+ # "is_withdrawal_enabled": True,
478
+ # "min_deposit_amount": "0.000001",
479
+ # "is_memo_required": False,
480
+ # "withdrawal_scale": 6,
481
+ # "scale": 12
482
+ # },
483
+ # {
484
+ # "guid": "4e387a9a-a480-40a3-b4ae-ed1773c2db5a",
485
+ # "is_deposit_enabled": True,
486
+ # "gateway_name": "BinanceSmartChain",
487
+ # "min_withdrawal_amount": "10",
488
+ # "withdrawal_fee": "5",
489
+ # "is_withdrawal_enabled": False,
490
+ # "min_deposit_amount": "1",
491
+ # "is_memo_required": False,
492
+ # "withdrawal_scale": 8,
493
+ # "scale": 12
494
+ # }
495
+ # ]
371
496
  # },
372
- # "info_link": null,
373
- # "scale": "12",
374
- # "default_gateway": ..., # one object from "gateways"
375
- # "gateways": [
376
- # {
377
- # "uuid": "f0fa5a85-7f65-428a-b7b7-13aad55c2837",
378
- # "name": "Mixin",
379
- # "kind": "CHAIN",
380
- # "required_confirmations": "0",
381
- # },
382
- # {
383
- # "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
384
- # "name": "Ethereum",
385
- # "kind": "CHAIN",
386
- # "required_confirmations": "18",
387
- # },
388
- # {
389
- # "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
390
- # "name": "Tron",
391
- # "kind": "CHAIN",
392
- # "required_confirmations": "1",
393
- # },
394
- # ...
395
- # ],
396
- # "payments": [],
397
- # "uuid": "17082d1c-0195-4fb6-8779-2cdbcb9eeb3c",
398
- # "binding_gateways": [
399
- # {
400
- # "guid": "07efc37f-d1ec-4bc9-8339-a745256ea2ba",
401
- # "contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
402
- # "is_deposit_enabled": True,
403
- # "display_name": "Ethereum(ERC20)",
404
- # "gateway_name": "Ethereum",
405
- # "min_withdrawal_amount": "0.000001",
406
- # "min_internal_withdrawal_amount": "0.00000001",
407
- # "withdrawal_fee": "14",
408
- # "is_withdrawal_enabled": True,
409
- # "min_deposit_amount": "0.000001",
410
- # "is_memo_required": False,
411
- # "withdrawal_scale": "2",
412
- # "gateway": {
413
- # "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
414
- # "name": "Ethereum",
415
- # "kind": "CHAIN",
416
- # "required_confirmations": "18",
417
- # },
418
- # "scale": "12",
419
- # },
420
- # {
421
- # "guid": "b80a4d13-cac7-4319-842d-b33c3bfab8ec",
422
- # "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
423
- # "is_deposit_enabled": True,
424
- # "display_name": "Tron(TRC20)",
425
- # "gateway_name": "Tron",
426
- # "min_withdrawal_amount": "0.000001",
427
- # "min_internal_withdrawal_amount": "0.00000001",
428
- # "withdrawal_fee": "1",
429
- # "is_withdrawal_enabled": True,
430
- # "min_deposit_amount": "0.000001",
431
- # "is_memo_required": False,
432
- # "withdrawal_scale": "6",
433
- # "gateway": {
434
- # "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
435
- # "name": "Tron",
436
- # "kind": "CHAIN",
437
- # "required_confirmations": "1",
438
- # },
439
- # "scale": "12",
440
- # },
441
- # ...
442
- # ],
443
- # },
444
497
  # ...
445
498
  # ],
446
499
  # }
447
500
  #
448
- currenciesData = self.safe_value(data, 'data', [])
449
- result = {}
501
+ currenciesData = self.safe_list(data, 'data', [])
502
+ result: dict = {}
450
503
  for i in range(0, len(currenciesData)):
451
504
  currency = currenciesData[i]
452
505
  id = self.safe_string(currency, 'symbol')
453
506
  code = self.safe_currency_code(id)
454
507
  name = self.safe_string(currency, 'name')
455
- type = 'fiat' if self.safe_value(currency, 'is_fiat') else 'crypto'
456
- networks = {}
457
- chains = self.safe_value(currency, 'binding_gateways', [])
508
+ type = 'fiat' if self.safe_bool(currency, 'is_fiat') else 'crypto'
509
+ networks: dict = {}
510
+ chains = self.safe_list(currency, 'binding_gateways', [])
458
511
  currencyMaxPrecision = self.parse_precision(self.safe_string_2(currency, 'withdrawal_scale', 'scale'))
459
512
  currencyDepositEnabled: Bool = None
460
513
  currencyWithdrawEnabled: Bool = None
@@ -462,8 +515,8 @@ class bigone(Exchange, ImplicitAPI):
462
515
  chain = chains[j]
463
516
  networkId = self.safe_string(chain, 'gateway_name')
464
517
  networkCode = self.network_id_to_code(networkId)
465
- deposit = self.safe_value(chain, 'is_deposit_enabled')
466
- withdraw = self.safe_value(chain, 'is_withdrawal_enabled')
518
+ deposit = self.safe_bool(chain, 'is_deposit_enabled')
519
+ withdraw = self.safe_bool(chain, 'is_withdrawal_enabled')
467
520
  isActive = (deposit and withdraw)
468
521
  minDepositAmount = self.safe_string(chain, 'min_deposit_amount')
469
522
  minWithdrawalAmount = self.safe_string(chain, 'min_withdrawal_amount')
@@ -519,10 +572,12 @@ class bigone(Exchange, ImplicitAPI):
519
572
  }
520
573
  return result
521
574
 
522
- async def fetch_markets(self, params={}):
575
+ async def fetch_markets(self, params={}) -> List[Market]:
523
576
  """
524
577
  retrieves data on all markets for bigone
525
- :see: https://open.big.one/docs/spot_asset_pair.html
578
+
579
+ https://open.big.one/docs/spot_asset_pair.html
580
+
526
581
  :param dict [params]: extra parameters specific to the exchange API endpoint
527
582
  :returns dict[]: an array of objects representing market data
528
583
  """
@@ -582,12 +637,12 @@ class bigone(Exchange, ImplicitAPI):
582
637
  # ...
583
638
  # ]
584
639
  #
585
- markets = self.safe_value(response, 'data', [])
640
+ markets = self.safe_list(response, 'data', [])
586
641
  result = []
587
642
  for i in range(0, len(markets)):
588
643
  market = markets[i]
589
- baseAsset = self.safe_value(market, 'base_asset', {})
590
- quoteAsset = self.safe_value(market, 'quote_asset', {})
644
+ baseAsset = self.safe_dict(market, 'base_asset', {})
645
+ quoteAsset = self.safe_dict(market, 'quote_asset', {})
591
646
  baseId = self.safe_string(baseAsset, 'symbol')
592
647
  quoteId = self.safe_string(quoteAsset, 'symbol')
593
648
  base = self.safe_currency_code(baseId)
@@ -651,7 +706,7 @@ class bigone(Exchange, ImplicitAPI):
651
706
  base = self.safe_currency_code(baseId)
652
707
  quote = self.safe_currency_code(quoteId)
653
708
  settle = self.safe_currency_code(settleId)
654
- inverse = self.safe_value(market, 'isInverse')
709
+ inverse = self.safe_bool(market, 'isInverse')
655
710
  result.append(self.safe_market_structure({
656
711
  'id': marketId,
657
712
  'symbol': base + '/' + quote + ':' + settle,
@@ -667,7 +722,7 @@ class bigone(Exchange, ImplicitAPI):
667
722
  'swap': True,
668
723
  'future': False,
669
724
  'option': False,
670
- 'active': self.safe_value(market, 'enable'),
725
+ 'active': self.safe_bool(market, 'enable'),
671
726
  'contract': True,
672
727
  'linear': not inverse,
673
728
  'inverse': inverse,
@@ -702,7 +757,7 @@ class bigone(Exchange, ImplicitAPI):
702
757
  }))
703
758
  return result
704
759
 
705
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
760
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
706
761
  #
707
762
  # spot
708
763
  #
@@ -753,8 +808,8 @@ class bigone(Exchange, ImplicitAPI):
753
808
  marketId = self.safe_string_2(ticker, 'asset_pair_name', 'symbol')
754
809
  symbol = self.safe_symbol(marketId, market, '-', marketType)
755
810
  close = self.safe_string_2(ticker, 'close', 'latestPrice')
756
- bid = self.safe_value(ticker, 'bid', {})
757
- ask = self.safe_value(ticker, 'ask', {})
811
+ bid = self.safe_dict(ticker, 'bid', {})
812
+ ask = self.safe_dict(ticker, 'ask', {})
758
813
  return self.safe_ticker({
759
814
  'symbol': symbol,
760
815
  'timestamp': None,
@@ -775,13 +830,17 @@ class bigone(Exchange, ImplicitAPI):
775
830
  'average': None,
776
831
  'baseVolume': self.safe_string_2(ticker, 'volume', 'volume24h'),
777
832
  'quoteVolume': self.safe_string(ticker, 'volume24hInUsd'),
833
+ 'markPrice': self.safe_string(ticker, 'markPrice'),
834
+ 'indexPrice': self.safe_string(ticker, 'indexPrice'),
778
835
  'info': ticker,
779
836
  }, market)
780
837
 
781
838
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
782
839
  """
783
840
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
784
- :see: https://open.big.one/docs/spot_tickers.html
841
+
842
+ https://open.big.one/docs/spot_tickers.html
843
+
785
844
  :param str symbol: unified symbol of the market to fetch the ticker for
786
845
  :param dict [params]: extra parameters specific to the exchange API endpoint
787
846
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -791,7 +850,7 @@ class bigone(Exchange, ImplicitAPI):
791
850
  type = None
792
851
  type, params = self.handle_market_type_and_params('fetchTicker', market, params)
793
852
  if type == 'spot':
794
- request = {
853
+ request: dict = {
795
854
  'asset_pair_name': market['id'],
796
855
  }
797
856
  response = await self.publicGetAssetPairsAssetPairNameTicker(self.extend(request, params))
@@ -811,7 +870,7 @@ class bigone(Exchange, ImplicitAPI):
811
870
  # }
812
871
  # }
813
872
  #
814
- ticker = self.safe_value(response, 'data', {})
873
+ ticker = self.safe_dict(response, 'data', {})
815
874
  return self.parse_ticker(ticker, market)
816
875
  else:
817
876
  tickers = await self.fetch_tickers([symbol], params)
@@ -820,7 +879,9 @@ class bigone(Exchange, ImplicitAPI):
820
879
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
821
880
  """
822
881
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
823
- :see: https://open.big.one/docs/spot_tickers.html
882
+
883
+ https://open.big.one/docs/spot_tickers.html
884
+
824
885
  :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
825
886
  :param dict [params]: extra parameters specific to the exchange API endpoint
826
887
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -833,7 +894,7 @@ class bigone(Exchange, ImplicitAPI):
833
894
  type = None
834
895
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
835
896
  isSpot = type == 'spot'
836
- request = {}
897
+ request: dict = {}
837
898
  symbols = self.market_symbols(symbols)
838
899
  data = None
839
900
  if isSpot:
@@ -868,7 +929,7 @@ class bigone(Exchange, ImplicitAPI):
868
929
  # ]
869
930
  # }
870
931
  #
871
- data = self.safe_value(response, 'data', [])
932
+ data = self.safe_list(response, 'data', [])
872
933
  else:
873
934
  data = await self.contractPublicGetInstruments(params)
874
935
  #
@@ -902,7 +963,9 @@ class bigone(Exchange, ImplicitAPI):
902
963
  async def fetch_time(self, params={}):
903
964
  """
904
965
  fetches the current integer timestamp in milliseconds from the exchange server
905
- :see: https://open.big.one/docs/spot_ping.html
966
+
967
+ https://open.big.one/docs/spot_ping.html
968
+
906
969
  :param dict [params]: extra parameters specific to the exchange API endpoint
907
970
  :returns int: the current integer timestamp in milliseconds from the exchange server
908
971
  """
@@ -914,14 +977,16 @@ class bigone(Exchange, ImplicitAPI):
914
977
  # }
915
978
  # }
916
979
  #
917
- data = self.safe_value(response, 'data', {})
980
+ data = self.safe_dict(response, 'data', {})
918
981
  timestamp = self.safe_integer(data, 'Timestamp')
919
982
  return self.parse_to_int(timestamp / 1000000)
920
983
 
921
984
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
922
985
  """
923
986
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
924
- :see: https://open.big.one/docs/contract_misc.html#get-orderbook-snapshot
987
+
988
+ https://open.big.one/docs/contract_misc.html#get-orderbook-snapshot
989
+
925
990
  :param str symbol: unified symbol of the market to fetch the order book for
926
991
  :param int [limit]: the maximum amount of order book entries to return
927
992
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -931,7 +996,7 @@ class bigone(Exchange, ImplicitAPI):
931
996
  market = self.market(symbol)
932
997
  response = None
933
998
  if market['contract']:
934
- request = {
999
+ request: dict = {
935
1000
  'symbol': market['id'],
936
1001
  }
937
1002
  response = await self.contractPublicGetDepthSymbolSnapshot(self.extend(request, params))
@@ -964,7 +1029,7 @@ class bigone(Exchange, ImplicitAPI):
964
1029
  #
965
1030
  return self.parse_contract_order_book(response, market['symbol'], limit)
966
1031
  else:
967
- request = {
1032
+ request: dict = {
968
1033
  'asset_pair_name': market['id'],
969
1034
  }
970
1035
  if limit is not None:
@@ -984,7 +1049,7 @@ class bigone(Exchange, ImplicitAPI):
984
1049
  # }
985
1050
  # }
986
1051
  #
987
- orderbook = self.safe_value(response, 'data', {})
1052
+ orderbook = self.safe_dict(response, 'data', {})
988
1053
  return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price', 'quantity')
989
1054
 
990
1055
  def parse_contract_bids_asks(self, bidsAsks):
@@ -1010,7 +1075,7 @@ class bigone(Exchange, ImplicitAPI):
1010
1075
  'nonce': None,
1011
1076
  }
1012
1077
 
1013
- def parse_trade(self, trade, market: Market = None) -> Trade:
1078
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
1014
1079
  #
1015
1080
  # fetchTrades(public)
1016
1081
  #
@@ -1079,7 +1144,7 @@ class bigone(Exchange, ImplicitAPI):
1079
1144
  elif takerOrderId is not None:
1080
1145
  orderId = takerOrderId
1081
1146
  id = self.safe_string(trade, 'id')
1082
- result = {
1147
+ result: dict = {
1083
1148
  'id': id,
1084
1149
  'timestamp': timestamp,
1085
1150
  'datetime': self.iso8601(timestamp),
@@ -1136,7 +1201,9 @@ class bigone(Exchange, ImplicitAPI):
1136
1201
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1137
1202
  """
1138
1203
  get the list of most recent trades for a particular symbol
1139
- :see: https://open.big.one/docs/spot_asset_pair_trade.html
1204
+
1205
+ https://open.big.one/docs/spot_asset_pair_trade.html
1206
+
1140
1207
  :param str symbol: unified symbol of the market to fetch trades for
1141
1208
  :param int [since]: timestamp in ms of the earliest trade to fetch
1142
1209
  :param int [limit]: the maximum amount of trades to fetch
@@ -1147,7 +1214,7 @@ class bigone(Exchange, ImplicitAPI):
1147
1214
  market = self.market(symbol)
1148
1215
  if market['contract']:
1149
1216
  raise BadRequest(self.id + ' fetchTrades() can only fetch trades for spot markets')
1150
- request = {
1217
+ request: dict = {
1151
1218
  'asset_pair_name': market['id'],
1152
1219
  }
1153
1220
  response = await self.publicGetAssetPairsAssetPairNameTrades(self.extend(request, params))
@@ -1172,7 +1239,7 @@ class bigone(Exchange, ImplicitAPI):
1172
1239
  # ]
1173
1240
  # }
1174
1241
  #
1175
- trades = self.safe_value(response, 'data', [])
1242
+ trades = self.safe_list(response, 'data', [])
1176
1243
  return self.parse_trades(trades, market, since, limit)
1177
1244
 
1178
1245
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -1198,30 +1265,42 @@ class bigone(Exchange, ImplicitAPI):
1198
1265
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1199
1266
  """
1200
1267
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1201
- :see: https://open.big.one/docs/spot_asset_pair_candle.html
1268
+
1269
+ https://open.big.one/docs/spot_asset_pair_candle.html
1270
+
1202
1271
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1203
1272
  :param str timeframe: the length of time each candle represents
1204
1273
  :param int [since]: timestamp in ms of the earliest candle to fetch
1205
1274
  :param int [limit]: the maximum amount of candles to fetch
1206
1275
  :param dict [params]: extra parameters specific to the exchange API endpoint
1276
+ :param int [params.until]: timestamp in ms of the earliest candle to fetch
1207
1277
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
1208
1278
  """
1209
1279
  await self.load_markets()
1210
1280
  market = self.market(symbol)
1211
1281
  if market['contract']:
1212
1282
  raise BadRequest(self.id + ' fetchOHLCV() can only fetch ohlcvs for spot markets')
1283
+ until = self.safe_integer(params, 'until')
1284
+ untilIsDefined = (until is not None)
1285
+ sinceIsDefined = (since is not None)
1213
1286
  if limit is None:
1214
- limit = 100 # default 100, max 500
1215
- request = {
1287
+ limit = 500 if (sinceIsDefined and untilIsDefined) else 100 # default 100, max 500, if since and limit defined then fetch all the candles between them unless it exceeds the max of 500
1288
+ request: dict = {
1216
1289
  'asset_pair_name': market['id'],
1217
1290
  'period': self.safe_string(self.timeframes, timeframe, timeframe),
1218
1291
  'limit': limit,
1219
1292
  }
1220
- if since is not None:
1293
+ if sinceIsDefined:
1221
1294
  # start = self.parse_to_int(since / 1000)
1222
1295
  duration = self.parse_timeframe(timeframe)
1223
- end = self.sum(since, limit * duration * 1000)
1224
- request['time'] = self.iso8601(end)
1296
+ endByLimit = self.sum(since, limit * duration * 1000)
1297
+ if untilIsDefined:
1298
+ request['time'] = self.iso8601(min(endByLimit, until + 1))
1299
+ else:
1300
+ request['time'] = self.iso8601(endByLimit)
1301
+ elif untilIsDefined:
1302
+ request['time'] = self.iso8601(until + 1)
1303
+ params = self.omit(params, 'until')
1225
1304
  response = await self.publicGetAssetPairsAssetPairNameCandles(self.extend(request, params))
1226
1305
  #
1227
1306
  # {
@@ -1246,16 +1325,16 @@ class bigone(Exchange, ImplicitAPI):
1246
1325
  # ]
1247
1326
  # }
1248
1327
  #
1249
- data = self.safe_value(response, 'data', [])
1328
+ data = self.safe_list(response, 'data', [])
1250
1329
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
1251
1330
 
1252
1331
  def parse_balance(self, response) -> Balances:
1253
- result = {
1332
+ result: dict = {
1254
1333
  'info': response,
1255
1334
  'timestamp': None,
1256
1335
  'datetime': None,
1257
1336
  }
1258
- balances = self.safe_value(response, 'data', [])
1337
+ balances = self.safe_list(response, 'data', [])
1259
1338
  for i in range(0, len(balances)):
1260
1339
  balance = balances[i]
1261
1340
  symbol = self.safe_string(balance, 'asset_symbol')
@@ -1269,8 +1348,10 @@ class bigone(Exchange, ImplicitAPI):
1269
1348
  async def fetch_balance(self, params={}) -> Balances:
1270
1349
  """
1271
1350
  query for balance and get the amount of funds available for trading or funds locked in orders
1272
- :see: https://open.big.one/docs/fund_accounts.html
1273
- :see: https://open.big.one/docs/spot_accounts.html
1351
+
1352
+ https://open.big.one/docs/fund_accounts.html
1353
+ https://open.big.one/docs/spot_accounts.html
1354
+
1274
1355
  :param dict [params]: extra parameters specific to the exchange API endpoint
1275
1356
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1276
1357
  """
@@ -1295,7 +1376,7 @@ class bigone(Exchange, ImplicitAPI):
1295
1376
  return self.parse_balance(response)
1296
1377
 
1297
1378
  def parse_type(self, type: str):
1298
- types = {
1379
+ types: dict = {
1299
1380
  'STOP_LIMIT': 'limit',
1300
1381
  'STOP_MARKET': 'market',
1301
1382
  'LIMIT': 'limit',
@@ -1303,7 +1384,7 @@ class bigone(Exchange, ImplicitAPI):
1303
1384
  }
1304
1385
  return self.safe_string(types, type, type)
1305
1386
 
1306
- def parse_order(self, order, market: Market = None) -> Order:
1387
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1307
1388
  #
1308
1389
  # {
1309
1390
  # "id": "42154072251",
@@ -1335,7 +1416,7 @@ class bigone(Exchange, ImplicitAPI):
1335
1416
  triggerPrice = self.safe_string(order, 'stop_price')
1336
1417
  if Precise.string_eq(triggerPrice, '0'):
1337
1418
  triggerPrice = None
1338
- immediateOrCancel = self.safe_value(order, 'immediate_or_cancel')
1419
+ immediateOrCancel = self.safe_bool(order, 'immediate_or_cancel')
1339
1420
  timeInForce = None
1340
1421
  if immediateOrCancel:
1341
1422
  timeInForce = 'IOC'
@@ -1359,10 +1440,9 @@ class bigone(Exchange, ImplicitAPI):
1359
1440
  'symbol': symbol,
1360
1441
  'type': type,
1361
1442
  'timeInForce': timeInForce,
1362
- 'postOnly': self.safe_value(order, 'post_only'),
1443
+ 'postOnly': self.safe_bool(order, 'post_only'),
1363
1444
  'side': side,
1364
1445
  'price': price,
1365
- 'stopPrice': triggerPrice,
1366
1446
  'triggerPrice': triggerPrice,
1367
1447
  'amount': amount,
1368
1448
  'cost': cost,
@@ -1377,7 +1457,9 @@ class bigone(Exchange, ImplicitAPI):
1377
1457
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1378
1458
  """
1379
1459
  create a market buy order by providing the symbol and cost
1380
- :see: https://open.big.one/docs/spot_orders.html#create-order
1460
+
1461
+ https://open.big.one/docs/spot_orders.html#create-order
1462
+
1381
1463
  :param str symbol: unified symbol of the market to create an order in
1382
1464
  :param float cost: how much you want to trade in units of the quote currency
1383
1465
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1393,21 +1475,23 @@ class bigone(Exchange, ImplicitAPI):
1393
1475
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1394
1476
  """
1395
1477
  create a trade order
1396
- :see: https://open.big.one/docs/spot_orders.html#create-order
1478
+
1479
+ https://open.big.one/docs/spot_orders.html#create-order
1480
+
1397
1481
  :param str symbol: unified symbol of the market to create an order in
1398
1482
  :param str type: 'market' or 'limit'
1399
1483
  :param str side: 'buy' or 'sell'
1400
1484
  :param float amount: how much of currency you want to trade in units of base currency
1401
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1485
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1402
1486
  :param dict [params]: extra parameters specific to the exchange API endpoint
1403
1487
  :param float [params.triggerPrice]: the price at which a trigger order is triggered at
1404
1488
  :param bool [params.postOnly]: if True, the order will only be posted to the order book and not executed immediately
1405
1489
  :param str [params.timeInForce]: "GTC", "IOC", or "PO"
1406
1490
  :param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
1407
- *
1408
- * EXCHANGE SPECIFIC PARAMETERS
1409
- :param str operator: *stop order only* GTE or LTE(default)
1410
- :param str client_order_id: must match ^[a-zA-Z0-9-_]{1,36}$ self regex. client_order_id is unique in 24 hours, If created 24 hours later and the order closed, it will be released and can be reused
1491
+
1492
+ EXCHANGE SPECIFIC PARAMETERS
1493
+ :param str [params.operator]: *stop order only* GTE or LTE(default)
1494
+ :param str [params.client_order_id]: must match ^[a-zA-Z0-9-_]{1,36}$ self regex. client_order_id is unique in 24 hours, If created 24 hours later and the order closed, it will be released and can be reused
1411
1495
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1412
1496
  """
1413
1497
  await self.load_markets()
@@ -1420,7 +1504,7 @@ class bigone(Exchange, ImplicitAPI):
1420
1504
  postOnly = None
1421
1505
  postOnly, params = self.handle_post_only((uppercaseType == 'MARKET'), exchangeSpecificParam, params)
1422
1506
  triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop_price'])
1423
- request = {
1507
+ request: dict = {
1424
1508
  'asset_pair_name': market['id'], # asset pair name BTC-USDT, required
1425
1509
  'side': requestSide, # order side one of "ASK"/"BID", required
1426
1510
  'amount': self.amount_to_precision(symbol, amount), # order amount, string, required
@@ -1484,20 +1568,22 @@ class bigone(Exchange, ImplicitAPI):
1484
1568
  # "updated_at":"2019-01-29T06:05:56Z"
1485
1569
  # }
1486
1570
  #
1487
- order = self.safe_value(response, 'data')
1571
+ order = self.safe_dict(response, 'data')
1488
1572
  return self.parse_order(order, market)
1489
1573
 
1490
1574
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1491
1575
  """
1492
1576
  cancels an open order
1493
- :see: https://open.big.one/docs/spot_orders.html#cancel-order
1577
+
1578
+ https://open.big.one/docs/spot_orders.html#cancel-order
1579
+
1494
1580
  :param str id: order id
1495
1581
  :param str symbol: Not used by bigone cancelOrder()
1496
1582
  :param dict [params]: extra parameters specific to the exchange API endpoint
1497
1583
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1498
1584
  """
1499
1585
  await self.load_markets()
1500
- request = {'id': id}
1586
+ request: dict = {'id': id}
1501
1587
  response = await self.privatePostOrdersIdCancel(self.extend(request, params))
1502
1588
  # {
1503
1589
  # "id": 10,
@@ -1511,20 +1597,22 @@ class bigone(Exchange, ImplicitAPI):
1511
1597
  # "created_at":"2019-01-29T06:05:56Z",
1512
1598
  # "updated_at":"2019-01-29T06:05:56Z"
1513
1599
  # }
1514
- order = self.safe_value(response, 'data')
1600
+ order = self.safe_dict(response, 'data')
1515
1601
  return self.parse_order(order)
1516
1602
 
1517
1603
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1518
1604
  """
1519
1605
  cancel all open orders
1520
- :see: https://open.big.one/docs/spot_orders.html#cancel-all-orders
1606
+
1607
+ https://open.big.one/docs/spot_orders.html#cancel-all-orders
1608
+
1521
1609
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1522
1610
  :param dict [params]: extra parameters specific to the exchange API endpoint
1523
1611
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1524
1612
  """
1525
1613
  await self.load_markets()
1526
1614
  market = self.market(symbol)
1527
- request = {
1615
+ request: dict = {
1528
1616
  'asset_pair_name': market['id'],
1529
1617
  }
1530
1618
  response = await self.privatePostOrdersCancel(self.extend(request, params))
@@ -1540,26 +1628,49 @@ class bigone(Exchange, ImplicitAPI):
1540
1628
  # }
1541
1629
  # }
1542
1630
  #
1543
- return response
1631
+ data = self.safe_dict(response, 'data', {})
1632
+ cancelled = self.safe_list(data, 'cancelled', [])
1633
+ failed = self.safe_list(data, 'failed', [])
1634
+ result = []
1635
+ for i in range(0, len(cancelled)):
1636
+ orderId = cancelled[i]
1637
+ result.append(self.safe_order({
1638
+ 'info': orderId,
1639
+ 'id': orderId,
1640
+ 'status': 'canceled',
1641
+ }))
1642
+ for i in range(0, len(failed)):
1643
+ orderId = failed[i]
1644
+ result.append(self.safe_order({
1645
+ 'info': orderId,
1646
+ 'id': orderId,
1647
+ 'status': 'failed',
1648
+ }))
1649
+ return result
1544
1650
 
1545
1651
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1546
1652
  """
1547
1653
  fetches information on an order made by the user
1548
- :see: https://open.big.one/docs/spot_orders.html#get-one-order
1654
+
1655
+ https://open.big.one/docs/spot_orders.html#get-one-order
1656
+
1657
+ :param str id: the order id
1549
1658
  :param str symbol: not used by bigone fetchOrder
1550
1659
  :param dict [params]: extra parameters specific to the exchange API endpoint
1551
1660
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1552
1661
  """
1553
1662
  await self.load_markets()
1554
- request = {'id': id}
1663
+ request: dict = {'id': id}
1555
1664
  response = await self.privateGetOrdersId(self.extend(request, params))
1556
- order = self.safe_value(response, 'data', {})
1665
+ order = self.safe_dict(response, 'data', {})
1557
1666
  return self.parse_order(order)
1558
1667
 
1559
1668
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1560
1669
  """
1561
1670
  fetches information on multiple orders made by the user
1562
- :see: https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1671
+
1672
+ https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1673
+
1563
1674
  :param str symbol: unified market symbol of the market orders were made in
1564
1675
  :param int [since]: the earliest time in ms to fetch orders for
1565
1676
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1570,7 +1681,7 @@ class bigone(Exchange, ImplicitAPI):
1570
1681
  raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
1571
1682
  await self.load_markets()
1572
1683
  market = self.market(symbol)
1573
- request = {
1684
+ request: dict = {
1574
1685
  'asset_pair_name': market['id'],
1575
1686
  # 'page_token': 'dxzef', # request page after self page token
1576
1687
  # 'side': 'ASK', # 'ASK' or 'BID', optional
@@ -1600,13 +1711,15 @@ class bigone(Exchange, ImplicitAPI):
1600
1711
  # "page_token":"dxzef",
1601
1712
  # }
1602
1713
  #
1603
- orders = self.safe_value(response, 'data', [])
1714
+ orders = self.safe_list(response, 'data', [])
1604
1715
  return self.parse_orders(orders, market, since, limit)
1605
1716
 
1606
1717
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1607
1718
  """
1608
1719
  fetch all trades made by the user
1609
- :see: https://open.big.one/docs/spot_trade.html#trades-of-user
1720
+
1721
+ https://open.big.one/docs/spot_trade.html#trades-of-user
1722
+
1610
1723
  :param str symbol: unified market symbol
1611
1724
  :param int [since]: the earliest time in ms to fetch trades for
1612
1725
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1617,7 +1730,7 @@ class bigone(Exchange, ImplicitAPI):
1617
1730
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
1618
1731
  await self.load_markets()
1619
1732
  market = self.market(symbol)
1620
- request = {
1733
+ request: dict = {
1621
1734
  'asset_pair_name': market['id'],
1622
1735
  # 'page_token': 'dxzef', # request page after self page token
1623
1736
  }
@@ -1658,11 +1771,11 @@ class bigone(Exchange, ImplicitAPI):
1658
1771
  # "page_token":"dxfv"
1659
1772
  # }
1660
1773
  #
1661
- trades = self.safe_value(response, 'data', [])
1774
+ trades = self.safe_list(response, 'data', [])
1662
1775
  return self.parse_trades(trades, market, since, limit)
1663
1776
 
1664
- def parse_order_status(self, status):
1665
- statuses = {
1777
+ def parse_order_status(self, status: Str):
1778
+ statuses: dict = {
1666
1779
  'PENDING': 'open',
1667
1780
  'FILLED': 'closed',
1668
1781
  'CANCELLED': 'canceled',
@@ -1672,14 +1785,16 @@ class bigone(Exchange, ImplicitAPI):
1672
1785
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1673
1786
  """
1674
1787
  fetch all unfilled currently open orders
1675
- :see: https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1788
+
1789
+ https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1790
+
1676
1791
  :param str symbol: unified market symbol
1677
1792
  :param int [since]: the earliest time in ms to fetch open orders for
1678
1793
  :param int [limit]: the maximum number of open orders structures to retrieve
1679
1794
  :param dict [params]: extra parameters specific to the exchange API endpoint
1680
1795
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1681
1796
  """
1682
- request = {
1797
+ request: dict = {
1683
1798
  'state': 'PENDING',
1684
1799
  }
1685
1800
  return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -1687,14 +1802,16 @@ class bigone(Exchange, ImplicitAPI):
1687
1802
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1688
1803
  """
1689
1804
  fetches information on multiple closed orders made by the user
1690
- :see: https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1805
+
1806
+ https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
1807
+
1691
1808
  :param str symbol: unified market symbol of the market orders were made in
1692
1809
  :param int [since]: the earliest time in ms to fetch orders for
1693
1810
  :param int [limit]: the maximum number of order structures to retrieve
1694
1811
  :param dict [params]: extra parameters specific to the exchange API endpoint
1695
1812
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1696
1813
  """
1697
- request = {
1814
+ request: dict = {
1698
1815
  'state': 'FILLED',
1699
1816
  }
1700
1817
  return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -1714,7 +1831,7 @@ class bigone(Exchange, ImplicitAPI):
1714
1831
  else:
1715
1832
  self.check_required_credentials()
1716
1833
  nonce = str(self.nonce())
1717
- request = {
1834
+ request: dict = {
1718
1835
  'type': 'OpenAPIV2',
1719
1836
  'sub': self.apiKey,
1720
1837
  'nonce': nonce,
@@ -1731,17 +1848,19 @@ class bigone(Exchange, ImplicitAPI):
1731
1848
  headers['User-Agent'] = 'ccxt/' + self.id + '-' + self.version
1732
1849
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1733
1850
 
1734
- async def fetch_deposit_address(self, code: str, params={}):
1851
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1735
1852
  """
1736
1853
  fetch the deposit address for a currency associated with self account
1737
- :see: https://open.big.one/docs/spot_deposit.html#get-deposite-address-of-one-asset-of-user
1854
+
1855
+ https://open.big.one/docs/spot_deposit.html#get-deposite-address-of-one-asset-of-user
1856
+
1738
1857
  :param str code: unified currency code
1739
1858
  :param dict [params]: extra parameters specific to the exchange API endpoint
1740
1859
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1741
1860
  """
1742
1861
  await self.load_markets()
1743
1862
  currency = self.currency(code)
1744
- request = {
1863
+ request: dict = {
1745
1864
  'asset_symbol': currency['id'],
1746
1865
  }
1747
1866
  networkCode, paramsOmitted = self.handle_network_code_and_params(params)
@@ -1763,26 +1882,26 @@ class bigone(Exchange, ImplicitAPI):
1763
1882
  # ]
1764
1883
  # }
1765
1884
  #
1766
- data = self.safe_value(response, 'data', [])
1885
+ data = self.safe_list(response, 'data', [])
1767
1886
  dataLength = len(data)
1768
1887
  if dataLength < 1:
1769
1888
  raise ExchangeError(self.id + ' fetchDepositAddress() returned empty address response')
1770
1889
  chainsIndexedById = self.index_by(data, 'chain')
1771
1890
  selectedNetworkId = self.select_network_id_from_raw_networks(code, networkCode, chainsIndexedById)
1772
- addressObject = self.safe_value(chainsIndexedById, selectedNetworkId, {})
1891
+ addressObject = self.safe_dict(chainsIndexedById, selectedNetworkId, {})
1773
1892
  address = self.safe_string(addressObject, 'value')
1774
1893
  tag = self.safe_string(addressObject, 'memo')
1775
1894
  self.check_address(address)
1776
1895
  return {
1896
+ 'info': response,
1777
1897
  'currency': code,
1898
+ 'network': self.network_id_to_code(selectedNetworkId),
1778
1899
  'address': address,
1779
1900
  'tag': tag,
1780
- 'network': self.network_id_to_code(selectedNetworkId),
1781
- 'info': response,
1782
1901
  }
1783
1902
 
1784
- def parse_transaction_status(self, status):
1785
- statuses = {
1903
+ def parse_transaction_status(self, status: Str):
1904
+ statuses: dict = {
1786
1905
  # what are other statuses here?
1787
1906
  'WITHHOLD': 'ok', # deposits
1788
1907
  'UNCONFIRMED': 'pending',
@@ -1792,7 +1911,7 @@ class bigone(Exchange, ImplicitAPI):
1792
1911
  }
1793
1912
  return self.safe_string(statuses, status, status)
1794
1913
 
1795
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1914
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1796
1915
  #
1797
1916
  # fetchDeposits
1798
1917
  #
@@ -1855,7 +1974,7 @@ class bigone(Exchange, ImplicitAPI):
1855
1974
  address = self.safe_string(transaction, 'target_address')
1856
1975
  tag = self.safe_string(transaction, 'memo')
1857
1976
  type = 'withdrawal' if ('customer_id' in transaction) else 'deposit'
1858
- internal = self.safe_value(transaction, 'is_internal')
1977
+ internal = self.safe_bool(transaction, 'is_internal')
1859
1978
  return {
1860
1979
  'info': transaction,
1861
1980
  'id': id,
@@ -1882,7 +2001,9 @@ class bigone(Exchange, ImplicitAPI):
1882
2001
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1883
2002
  """
1884
2003
  fetch all deposits made to an account
1885
- :see: https://open.big.one/docs/spot_deposit.html#deposit-of-user
2004
+
2005
+ https://open.big.one/docs/spot_deposit.html#deposit-of-user
2006
+
1886
2007
  :param str code: unified currency code
1887
2008
  :param int [since]: the earliest time in ms to fetch deposits for
1888
2009
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1890,7 +2011,7 @@ class bigone(Exchange, ImplicitAPI):
1890
2011
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1891
2012
  """
1892
2013
  await self.load_markets()
1893
- request = {
2014
+ request: dict = {
1894
2015
  # 'page_token': 'dxzef', # request page after self page token
1895
2016
  # 'limit': 50, # optional, default 50
1896
2017
  # 'kind': 'string', # optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
@@ -1924,13 +2045,15 @@ class bigone(Exchange, ImplicitAPI):
1924
2045
  # ]
1925
2046
  # }
1926
2047
  #
1927
- deposits = self.safe_value(response, 'data', [])
2048
+ deposits = self.safe_list(response, 'data', [])
1928
2049
  return self.parse_transactions(deposits, currency, since, limit)
1929
2050
 
1930
2051
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1931
2052
  """
1932
2053
  fetch all withdrawals made from an account
1933
- :see: https://open.big.one/docs/spot_withdrawal.html#get-withdrawals-of-user
2054
+
2055
+ https://open.big.one/docs/spot_withdrawal.html#get-withdrawals-of-user
2056
+
1934
2057
  :param str code: unified currency code
1935
2058
  :param int [since]: the earliest time in ms to fetch withdrawals for
1936
2059
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1938,7 +2061,7 @@ class bigone(Exchange, ImplicitAPI):
1938
2061
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1939
2062
  """
1940
2063
  await self.load_markets()
1941
- request = {
2064
+ request: dict = {
1942
2065
  # 'page_token': 'dxzef', # request page after self page token
1943
2066
  # 'limit': 50, # optional, default 50
1944
2067
  # 'kind': 'string', # optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
@@ -1972,13 +2095,15 @@ class bigone(Exchange, ImplicitAPI):
1972
2095
  # "page_token":"dxvf"
1973
2096
  # }
1974
2097
  #
1975
- withdrawals = self.safe_value(response, 'data', [])
2098
+ withdrawals = self.safe_list(response, 'data', [])
1976
2099
  return self.parse_transactions(withdrawals, currency, since, limit)
1977
2100
 
1978
2101
  async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
1979
2102
  """
1980
2103
  transfer currency internally between wallets on the same account
1981
- :see: https://open.big.one/docs/spot_transfer.html#transfer-of-user
2104
+
2105
+ https://open.big.one/docs/spot_transfer.html#transfer-of-user
2106
+
1982
2107
  :param str code: unified currency code
1983
2108
  :param float amount: amount to transfer
1984
2109
  :param str fromAccount: 'SPOT', 'FUND', or 'CONTRACT'
@@ -1988,11 +2113,11 @@ class bigone(Exchange, ImplicitAPI):
1988
2113
  """
1989
2114
  await self.load_markets()
1990
2115
  currency = self.currency(code)
1991
- accountsByType = self.safe_value(self.options, 'accountsByType', {})
2116
+ accountsByType = self.safe_dict(self.options, 'accountsByType', {})
1992
2117
  fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
1993
2118
  toId = self.safe_string(accountsByType, toAccount, toAccount)
1994
2119
  guid = self.safe_string(params, 'guid', self.uuid())
1995
- request = {
2120
+ request: dict = {
1996
2121
  'symbol': currency['id'],
1997
2122
  'amount': self.currency_to_precision(code, amount),
1998
2123
  'from': fromId,
@@ -2009,7 +2134,7 @@ class bigone(Exchange, ImplicitAPI):
2009
2134
  # }
2010
2135
  #
2011
2136
  transfer = self.parse_transfer(response, currency)
2012
- transferOptions = self.safe_value(self.options, 'transfer', {})
2137
+ transferOptions = self.safe_dict(self.options, 'transfer', {})
2013
2138
  fillResponseFromRequest = self.safe_bool(transferOptions, 'fillResponseFromRequest', True)
2014
2139
  if fillResponseFromRequest:
2015
2140
  transfer['fromAccount'] = fromAccount
@@ -2018,14 +2143,14 @@ class bigone(Exchange, ImplicitAPI):
2018
2143
  transfer['id'] = guid
2019
2144
  return transfer
2020
2145
 
2021
- def parse_transfer(self, transfer, currency: Currency = None):
2146
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
2022
2147
  #
2023
2148
  # {
2024
2149
  # "code": 0,
2025
2150
  # "data": null
2026
2151
  # }
2027
2152
  #
2028
- code = self.safe_number(transfer, 'code')
2153
+ code = self.safe_string(transfer, 'code')
2029
2154
  return {
2030
2155
  'info': transfer,
2031
2156
  'id': None,
@@ -2038,16 +2163,18 @@ class bigone(Exchange, ImplicitAPI):
2038
2163
  'status': self.parse_transfer_status(code),
2039
2164
  }
2040
2165
 
2041
- def parse_transfer_status(self, status):
2042
- statuses = {
2166
+ def parse_transfer_status(self, status: Str) -> Str:
2167
+ statuses: dict = {
2043
2168
  '0': 'ok',
2044
2169
  }
2045
2170
  return self.safe_string(statuses, status, 'failed')
2046
2171
 
2047
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2172
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2048
2173
  """
2049
2174
  make a withdrawal
2050
- :see: https://open.big.one/docs/spot_withdrawal.html#create-withdrawal-of-user
2175
+
2176
+ https://open.big.one/docs/spot_withdrawal.html#create-withdrawal-of-user
2177
+
2051
2178
  :param str code: unified currency code
2052
2179
  :param float amount: the amount to withdraw
2053
2180
  :param str address: the address to withdraw to
@@ -2058,7 +2185,7 @@ class bigone(Exchange, ImplicitAPI):
2058
2185
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
2059
2186
  await self.load_markets()
2060
2187
  currency = self.currency(code)
2061
- request = {
2188
+ request: dict = {
2062
2189
  'symbol': currency['id'],
2063
2190
  'target_address': address,
2064
2191
  'amount': self.currency_to_precision(code, amount),
@@ -2092,10 +2219,10 @@ class bigone(Exchange, ImplicitAPI):
2092
2219
  # }
2093
2220
  # }
2094
2221
  #
2095
- data = self.safe_value(response, 'data', {})
2222
+ data = self.safe_dict(response, 'data', {})
2096
2223
  return self.parse_transaction(data, currency)
2097
2224
 
2098
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2225
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2099
2226
  if response is None:
2100
2227
  return None # fallback to default error handler
2101
2228
  #