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
ccxt/tokocrypto.py CHANGED
@@ -7,16 +7,16 @@ from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.tokocrypto import ImplicitAPI
8
8
  import hashlib
9
9
  import json
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
+ from ccxt.base.errors import AuthenticationError
13
14
  from ccxt.base.errors import PermissionDenied
14
15
  from ccxt.base.errors import AccountSuspended
15
16
  from ccxt.base.errors import ArgumentsRequired
16
17
  from ccxt.base.errors import BadRequest
17
18
  from ccxt.base.errors import BadSymbol
18
19
  from ccxt.base.errors import MarginModeAlreadySet
19
- from ccxt.base.errors import BadResponse
20
20
  from ccxt.base.errors import InsufficientFunds
21
21
  from ccxt.base.errors import InvalidOrder
22
22
  from ccxt.base.errors import OrderNotFound
@@ -29,9 +29,9 @@ from ccxt.base.errors import ExchangeNotAvailable
29
29
  from ccxt.base.errors import OnMaintenance
30
30
  from ccxt.base.errors import InvalidNonce
31
31
  from ccxt.base.errors import RequestTimeout
32
- from ccxt.base.errors import AuthenticationError
32
+ from ccxt.base.errors import BadResponse
33
33
  from ccxt.base.decimal_to_precision import TRUNCATE
34
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES
34
+ from ccxt.base.decimal_to_precision import TICK_SIZE
35
35
  from ccxt.base.precise import Precise
36
36
 
37
37
 
@@ -234,7 +234,7 @@ class tokocrypto(Exchange, ImplicitAPI):
234
234
  'maker': self.parse_number('0.0075'), # 0.1% trading fee, zero fees for all trading pairs before November 1
235
235
  },
236
236
  },
237
- 'precisionMode': DECIMAL_PLACES,
237
+ 'precisionMode': TICK_SIZE,
238
238
  'options': {
239
239
  # 'fetchTradesMethod': 'binanceGetTrades', # binanceGetTrades, binanceGetAggTrades
240
240
  'createMarketBuyOrderRequiresPrice': True,
@@ -626,7 +626,9 @@ class tokocrypto(Exchange, ImplicitAPI):
626
626
 
627
627
  def fetch_time(self, params={}):
628
628
  """
629
- :see: https://www.tokocrypto.com/apidocs/#check-server-time
629
+
630
+ https://www.tokocrypto.com/apidocs/#check-server-time
631
+
630
632
  fetches the current integer timestamp in milliseconds from the exchange server
631
633
  :param dict [params]: extra parameters specific to the exchange API endpoint
632
634
  :returns int: the current integer timestamp in milliseconds from the exchange server
@@ -637,9 +639,11 @@ class tokocrypto(Exchange, ImplicitAPI):
637
639
  #
638
640
  return self.safe_integer(response, 'serverTime')
639
641
 
640
- def fetch_markets(self, params={}):
642
+ def fetch_markets(self, params={}) -> List[Market]:
641
643
  """
642
- :see: https://www.tokocrypto.com/apidocs/#get-all-supported-trading-symbol
644
+
645
+ https://www.tokocrypto.com/apidocs/#get-all-supported-trading-symbol
646
+
643
647
  retrieves data on all markets for tokocrypto
644
648
  :param dict [params]: extra parameters specific to the exchange API endpoint
645
649
  :returns dict[]: an array of objects representing market data
@@ -707,7 +711,7 @@ class tokocrypto(Exchange, ImplicitAPI):
707
711
  active = False
708
712
  break
709
713
  isMarginTradingAllowed = self.safe_bool(market, 'isMarginTradingAllowed', False)
710
- entry = {
714
+ entry: dict = {
711
715
  'id': id,
712
716
  'lowercaseId': lowercaseId,
713
717
  'symbol': symbol,
@@ -734,10 +738,10 @@ class tokocrypto(Exchange, ImplicitAPI):
734
738
  'strike': None,
735
739
  'optionType': None,
736
740
  'precision': {
737
- 'amount': self.safe_integer(market, 'quantityPrecision'),
738
- 'price': self.safe_integer(market, 'pricePrecision'),
739
- 'base': self.safe_integer(market, 'baseAssetPrecision'),
740
- 'quote': self.safe_integer(market, 'quotePrecision'),
741
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'quantityPrecision'))),
742
+ 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'pricePrecision'))),
743
+ 'base': self.parse_number(self.parse_precision(self.safe_string(market, 'baseAssetPrecision'))),
744
+ 'quote': self.parse_number(self.parse_precision(self.safe_string(market, 'quotePrecision'))),
741
745
  },
742
746
  'limits': {
743
747
  'leverage': {
@@ -762,8 +766,7 @@ class tokocrypto(Exchange, ImplicitAPI):
762
766
  }
763
767
  if 'PRICE_FILTER' in filtersByType:
764
768
  filter = self.safe_value(filtersByType, 'PRICE_FILTER', {})
765
- tickSize = self.safe_string(filter, 'tickSize')
766
- entry['precision']['price'] = self.precision_from_string(tickSize)
769
+ entry['precision']['price'] = self.safe_number(filter, 'tickSize')
767
770
  # PRICE_FILTER reports zero values for maxPrice
768
771
  # since they updated filter types in November 2018
769
772
  # https://github.com/ccxt/ccxt/issues/4286
@@ -772,11 +775,10 @@ class tokocrypto(Exchange, ImplicitAPI):
772
775
  'min': self.safe_number(filter, 'minPrice'),
773
776
  'max': self.safe_number(filter, 'maxPrice'),
774
777
  }
775
- entry['precision']['price'] = self.precision_from_string(filter['tickSize'])
778
+ entry['precision']['price'] = filter['tickSize']
776
779
  if 'LOT_SIZE' in filtersByType:
777
780
  filter = self.safe_value(filtersByType, 'LOT_SIZE', {})
778
- stepSize = self.safe_string(filter, 'stepSize')
779
- entry['precision']['amount'] = self.precision_from_string(stepSize)
781
+ entry['precision']['amount'] = self.safe_number(filter, 'stepSize')
780
782
  entry['limits']['amount'] = {
781
783
  'min': self.safe_number(filter, 'minQty'),
782
784
  'max': self.safe_number(filter, 'maxQty'),
@@ -795,7 +797,9 @@ class tokocrypto(Exchange, ImplicitAPI):
795
797
 
796
798
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
797
799
  """
798
- :see: https://www.tokocrypto.com/apidocs/#order-book
800
+
801
+ https://www.tokocrypto.com/apidocs/#order-book
802
+
799
803
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
800
804
  :param str symbol: unified symbol of the market to fetch the order book for
801
805
  :param int [limit]: the maximum amount of order book entries to return
@@ -804,7 +808,7 @@ class tokocrypto(Exchange, ImplicitAPI):
804
808
  """
805
809
  self.load_markets()
806
810
  market = self.market(symbol)
807
- request = {}
811
+ request: dict = {}
808
812
  if limit is not None:
809
813
  request['limit'] = limit # default 100, max 5000, see https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#order-book
810
814
  response = None
@@ -849,7 +853,7 @@ class tokocrypto(Exchange, ImplicitAPI):
849
853
  orderbook['nonce'] = self.safe_integer(data, 'lastUpdateId')
850
854
  return orderbook
851
855
 
852
- def parse_trade(self, trade, market: Market = None) -> Trade:
856
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
853
857
  #
854
858
  # aggregate trades
855
859
  # https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#compressedaggregate-trades-list
@@ -991,8 +995,10 @@ class tokocrypto(Exchange, ImplicitAPI):
991
995
 
992
996
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
993
997
  """
994
- :see: https://www.tokocrypto.com/apidocs/#recent-trades-list
995
- :see: https://www.tokocrypto.com/apidocs/#compressedaggregate-trades-list
998
+
999
+ https://www.tokocrypto.com/apidocs/#recent-trades-list
1000
+ https://www.tokocrypto.com/apidocs/#compressedaggregate-trades-list
1001
+
996
1002
  get the list of most recent trades for a particular symbol
997
1003
  :param str symbol: unified symbol of the market to fetch trades for
998
1004
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -1002,7 +1008,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1002
1008
  """
1003
1009
  self.load_markets()
1004
1010
  market = self.market(symbol)
1005
- request = {
1011
+ request: dict = {
1006
1012
  'symbol': self.get_market_id_by_type(market),
1007
1013
  # 'fromId': 123, # ID to get aggregate trades from INCLUSIVE.
1008
1014
  # 'startTime': 456, # Timestamp in ms to get aggregate trades from INCLUSIVE.
@@ -1088,7 +1094,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1088
1094
  #
1089
1095
  return self.parse_trades(response, market, since, limit)
1090
1096
 
1091
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1097
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1092
1098
  #
1093
1099
  # {
1094
1100
  # "symbol": "ETHBTC",
@@ -1173,7 +1179,9 @@ class tokocrypto(Exchange, ImplicitAPI):
1173
1179
 
1174
1180
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
1175
1181
  """
1176
- :see: https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
1182
+
1183
+ https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
1184
+
1177
1185
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1178
1186
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1179
1187
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1190,7 +1198,9 @@ class tokocrypto(Exchange, ImplicitAPI):
1190
1198
 
1191
1199
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
1192
1200
  """
1193
- :see: https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
1201
+
1202
+ https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
1203
+
1194
1204
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1195
1205
  :param str symbol: unified symbol of the market to fetch the ticker for
1196
1206
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1198,18 +1208,20 @@ class tokocrypto(Exchange, ImplicitAPI):
1198
1208
  """
1199
1209
  self.load_markets()
1200
1210
  market = self.market(symbol)
1201
- request = {
1211
+ request: dict = {
1202
1212
  'symbol': market['baseId'] + market['quoteId'],
1203
1213
  }
1204
1214
  response = self.binanceGetTicker24hr(self.extend(request, params))
1205
1215
  if isinstance(response, list):
1206
- firstTicker = self.safe_value(response, 0, {})
1216
+ firstTicker = self.safe_dict(response, 0, {})
1207
1217
  return self.parse_ticker(firstTicker, market)
1208
1218
  return self.parse_ticker(response, market)
1209
1219
 
1210
1220
  def fetch_bids_asks(self, symbols: Strings = None, params={}):
1211
1221
  """
1212
- :see: https://binance-docs.github.io/apidocs/spot/en/#symbol-order-book-ticker
1222
+
1223
+ https://binance-docs.github.io/apidocs/spot/en/#symbol-order-book-ticker
1224
+
1213
1225
  fetches the bid and ask price and volume for multiple markets
1214
1226
  :param str[]|None symbols: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
1215
1227
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1265,7 +1277,9 @@ class tokocrypto(Exchange, ImplicitAPI):
1265
1277
 
1266
1278
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1267
1279
  """
1268
- :see: https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data
1280
+
1281
+ https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data
1282
+
1269
1283
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1270
1284
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1271
1285
  :param str timeframe: the length of time each candle represents
@@ -1286,7 +1300,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1286
1300
  until = self.safe_integer(params, 'until')
1287
1301
  params = self.omit(params, ['price', 'until'])
1288
1302
  limit = defaultLimit if (limit is None) else min(limit, maxLimit)
1289
- request = {
1303
+ request: dict = {
1290
1304
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
1291
1305
  'limit': limit,
1292
1306
  }
@@ -1311,12 +1325,14 @@ class tokocrypto(Exchange, ImplicitAPI):
1311
1325
  # [1591478640000,"0.02500800","0.02501100","0.02500300","0.02500800","154.14200000",1591478699999,"3.85405839",97,"5.32300000","0.13312641","0"],
1312
1326
  # ]
1313
1327
  #
1314
- data = self.safe_value(response, 'data', response)
1328
+ data = self.safe_list(response, 'data', response)
1315
1329
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
1316
1330
 
1317
1331
  def fetch_balance(self, params={}) -> Balances:
1318
1332
  """
1319
- :see: https://www.tokocrypto.com/apidocs/#account-information-signed
1333
+
1334
+ https://www.tokocrypto.com/apidocs/#account-information-signed
1335
+
1320
1336
  query for balance and get the amount of funds available for trading or funds locked in orders
1321
1337
  :param dict [params]: extra parameters specific to the exchange API endpoint
1322
1338
  :param str [params.type]: 'future', 'delivery', 'savings', 'funding', or 'spot'
@@ -1329,7 +1345,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1329
1345
  type = self.safe_string(params, 'type', defaultType)
1330
1346
  defaultMarginMode = self.safe_string_2(self.options, 'marginMode', 'defaultMarginMode')
1331
1347
  marginMode = self.safe_string_lower(params, 'marginMode', defaultMarginMode)
1332
- request = {}
1348
+ request: dict = {}
1333
1349
  response = self.privateGetOpenV1AccountSpot(self.extend(request, params))
1334
1350
  #
1335
1351
  # spot
@@ -1359,7 +1375,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1359
1375
 
1360
1376
  def parse_balance_custom(self, response, type=None, marginMode=None):
1361
1377
  timestamp = self.safe_integer(response, 'updateTime')
1362
- result = {
1378
+ result: dict = {
1363
1379
  'info': response,
1364
1380
  'timestamp': timestamp,
1365
1381
  'datetime': self.iso8601(timestamp),
@@ -1376,8 +1392,8 @@ class tokocrypto(Exchange, ImplicitAPI):
1376
1392
  result[code] = account
1377
1393
  return self.safe_balance(result)
1378
1394
 
1379
- def parse_order_status(self, status):
1380
- statuses = {
1395
+ def parse_order_status(self, status: Str):
1396
+ statuses: dict = {
1381
1397
  '-2': 'open',
1382
1398
  '0': 'open', # NEW
1383
1399
  '1': 'open', # PARTIALLY_FILLED
@@ -1396,7 +1412,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1396
1412
  }
1397
1413
  return self.safe_string(statuses, status, status)
1398
1414
 
1399
- def parse_order(self, order, market: Market = None) -> Order:
1415
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1400
1416
  #
1401
1417
  # spot
1402
1418
  #
@@ -1520,8 +1536,6 @@ class tokocrypto(Exchange, ImplicitAPI):
1520
1536
  # GTX means "Good Till Crossing" and is an equivalent way of saying Post Only
1521
1537
  timeInForce = 'PO'
1522
1538
  postOnly = (type == 'limit_maker') or (timeInForce == 'PO')
1523
- stopPriceString = self.safe_string(order, 'stopPrice')
1524
- stopPrice = self.parse_number(self.omit_zero(stopPriceString))
1525
1539
  return self.safe_order({
1526
1540
  'info': order,
1527
1541
  'id': id,
@@ -1536,8 +1550,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1536
1550
  'reduceOnly': self.safe_value(order, 'reduceOnly'),
1537
1551
  'side': side,
1538
1552
  'price': price,
1539
- 'stopPrice': stopPrice,
1540
- 'triggerPrice': stopPrice,
1553
+ 'triggerPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'stopPrice'))),
1541
1554
  'amount': amount,
1542
1555
  'cost': cost,
1543
1556
  'average': average,
@@ -1549,7 +1562,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1549
1562
  }, market)
1550
1563
 
1551
1564
  def parse_order_type(self, status):
1552
- statuses = {
1565
+ statuses: dict = {
1553
1566
  '2': 'market',
1554
1567
  '1': 'limit',
1555
1568
  '4': 'limit',
@@ -1560,13 +1573,15 @@ class tokocrypto(Exchange, ImplicitAPI):
1560
1573
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1561
1574
  """
1562
1575
  create a trade order
1563
- :see: https://www.tokocrypto.com/apidocs/#new-order--signed
1564
- :see: https://www.tokocrypto.com/apidocs/#account-trade-list-signed
1576
+
1577
+ https://www.tokocrypto.com/apidocs/#new-order--signed
1578
+ https://www.tokocrypto.com/apidocs/#account-trade-list-signed
1579
+
1565
1580
  :param str symbol: unified symbol of the market to create an order in
1566
1581
  :param str type: 'market' or 'limit'
1567
1582
  :param str side: 'buy' or 'sell'
1568
1583
  :param float amount: how much of currency you want to trade in units of base currency
1569
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1584
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1570
1585
  :param dict [params]: extra parameters specific to the exchange API endpoint
1571
1586
  :param float [params.triggerPrice]: the price at which a trigger order would be triggered
1572
1587
  :param float [params.cost]: for spot market buy orders, the quote quantity that can be used alternative for the amount
@@ -1582,8 +1597,8 @@ class tokocrypto(Exchange, ImplicitAPI):
1582
1597
  params = self.omit(params, ['clientId', 'clientOrderId'])
1583
1598
  initialUppercaseType = type.upper()
1584
1599
  uppercaseType = initialUppercaseType
1585
- stopPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
1586
- if stopPrice is not None:
1600
+ triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
1601
+ if triggerPrice is not None:
1587
1602
  params = self.omit(params, ['triggerPrice', 'stopPrice'])
1588
1603
  if uppercaseType == 'MARKET':
1589
1604
  uppercaseType = 'STOP_LOSS'
@@ -1592,10 +1607,10 @@ class tokocrypto(Exchange, ImplicitAPI):
1592
1607
  validOrderTypes = self.safe_value(market['info'], 'orderTypes')
1593
1608
  if not self.in_array(uppercaseType, validOrderTypes):
1594
1609
  if initialUppercaseType != uppercaseType:
1595
- raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
1610
+ raise InvalidOrder(self.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
1596
1611
  else:
1597
1612
  raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
1598
- reverseOrderTypeMapping = {
1613
+ reverseOrderTypeMapping: dict = {
1599
1614
  'LIMIT': 1,
1600
1615
  'MARKET': 2,
1601
1616
  'STOP_LOSS': 3,
@@ -1604,7 +1619,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1604
1619
  'TAKE_PROFIT_LIMIT': 6,
1605
1620
  'LIMIT_MAKER': 7,
1606
1621
  }
1607
- request = {
1622
+ request: dict = {
1608
1623
  'symbol': market['baseId'] + '_' + market['quoteId'],
1609
1624
  'type': self.safe_string(reverseOrderTypeMapping, uppercaseType),
1610
1625
  }
@@ -1622,7 +1637,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1622
1637
  request['clientId'] = clientOrderId
1623
1638
  # additional required fields depending on the order type
1624
1639
  priceIsRequired = False
1625
- stopPriceIsRequired = False
1640
+ triggerPriceIsRequired = False
1626
1641
  quantityIsRequired = False
1627
1642
  #
1628
1643
  # spot/margin
@@ -1661,13 +1676,13 @@ class tokocrypto(Exchange, ImplicitAPI):
1661
1676
  priceIsRequired = True
1662
1677
  quantityIsRequired = True
1663
1678
  elif (uppercaseType == 'STOP_LOSS') or (uppercaseType == 'TAKE_PROFIT'):
1664
- stopPriceIsRequired = True
1679
+ triggerPriceIsRequired = True
1665
1680
  quantityIsRequired = True
1666
1681
  if market['linear'] or market['inverse']:
1667
1682
  priceIsRequired = True
1668
1683
  elif (uppercaseType == 'STOP_LOSS_LIMIT') or (uppercaseType == 'TAKE_PROFIT_LIMIT'):
1669
1684
  quantityIsRequired = True
1670
- stopPriceIsRequired = True
1685
+ triggerPriceIsRequired = True
1671
1686
  priceIsRequired = True
1672
1687
  elif uppercaseType == 'LIMIT_MAKER':
1673
1688
  priceIsRequired = True
@@ -1678,11 +1693,11 @@ class tokocrypto(Exchange, ImplicitAPI):
1678
1693
  if price is None:
1679
1694
  raise InvalidOrder(self.id + ' createOrder() requires a price argument for a ' + type + ' order')
1680
1695
  request['price'] = self.price_to_precision(symbol, price)
1681
- if stopPriceIsRequired:
1682
- if stopPrice is None:
1683
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice extra param for a ' + type + ' order')
1696
+ if triggerPriceIsRequired:
1697
+ if triggerPrice is None:
1698
+ raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice extra param for a ' + type + ' order')
1684
1699
  else:
1685
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
1700
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
1686
1701
  response = self.privatePostOpenV1Orders(self.extend(request, params))
1687
1702
  #
1688
1703
  # {
@@ -1712,18 +1727,21 @@ class tokocrypto(Exchange, ImplicitAPI):
1712
1727
  # "timestamp": 1662710994975
1713
1728
  # }
1714
1729
  #
1715
- rawOrder = self.safe_value(response, 'data', {})
1730
+ rawOrder = self.safe_dict(response, 'data', {})
1716
1731
  return self.parse_order(rawOrder, market)
1717
1732
 
1718
1733
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1719
1734
  """
1720
- :see: https://www.tokocrypto.com/apidocs/#all-orders-signed
1735
+
1736
+ https://www.tokocrypto.com/apidocs/#all-orders-signed
1737
+
1721
1738
  fetches information on an order made by the user
1739
+ :param str id: order id
1722
1740
  :param str symbol: unified symbol of the market the order was made in
1723
1741
  :param dict [params]: extra parameters specific to the exchange API endpoint
1724
1742
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1725
1743
  """
1726
- request = {
1744
+ request: dict = {
1727
1745
  'orderId': id,
1728
1746
  }
1729
1747
  response = self.privateGetOpenV1Orders(self.extend(request, params))
@@ -1759,12 +1777,14 @@ class tokocrypto(Exchange, ImplicitAPI):
1759
1777
  #
1760
1778
  data = self.safe_value(response, 'data', {})
1761
1779
  list = self.safe_value(data, 'list', [])
1762
- rawOrder = self.safe_value(list, 0, {})
1780
+ rawOrder = self.safe_dict(list, 0, {})
1763
1781
  return self.parse_order(rawOrder)
1764
1782
 
1765
1783
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1766
1784
  """
1767
- :see: https://www.tokocrypto.com/apidocs/#all-orders-signed
1785
+
1786
+ https://www.tokocrypto.com/apidocs/#all-orders-signed
1787
+
1768
1788
  fetches information on multiple orders made by the user
1769
1789
  :param str symbol: unified market symbol of the market orders were made in
1770
1790
  :param int [since]: the earliest time in ms to fetch orders for
@@ -1776,7 +1796,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1776
1796
  raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
1777
1797
  self.load_markets()
1778
1798
  market = self.market(symbol)
1779
- request = {
1799
+ request: dict = {
1780
1800
  'symbol': market['id'],
1781
1801
  # 'type': -1, # -1 = all, 1 = open, 2 = closed
1782
1802
  # 'side': 1, # or 2
@@ -1825,12 +1845,14 @@ class tokocrypto(Exchange, ImplicitAPI):
1825
1845
  # }
1826
1846
  #
1827
1847
  data = self.safe_value(response, 'data', {})
1828
- orders = self.safe_value(data, 'list', [])
1848
+ orders = self.safe_list(data, 'list', [])
1829
1849
  return self.parse_orders(orders, market, since, limit)
1830
1850
 
1831
1851
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1832
1852
  """
1833
- :see: https://www.tokocrypto.com/apidocs/#all-orders-signed
1853
+
1854
+ https://www.tokocrypto.com/apidocs/#all-orders-signed
1855
+
1834
1856
  fetch all unfilled currently open orders
1835
1857
  :param str symbol: unified market symbol
1836
1858
  :param int [since]: the earliest time in ms to fetch open orders for
@@ -1838,12 +1860,14 @@ class tokocrypto(Exchange, ImplicitAPI):
1838
1860
  :param dict [params]: extra parameters specific to the exchange API endpoint
1839
1861
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1840
1862
  """
1841
- request = {'type': 1} # -1 = all, 1 = open, 2 = closed
1863
+ request: dict = {'type': 1} # -1 = all, 1 = open, 2 = closed
1842
1864
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
1843
1865
 
1844
1866
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1845
1867
  """
1846
- :see: https://www.tokocrypto.com/apidocs/#all-orders-signed
1868
+
1869
+ https://www.tokocrypto.com/apidocs/#all-orders-signed
1870
+
1847
1871
  fetches information on multiple closed orders made by the user
1848
1872
  :param str symbol: unified market symbol of the market orders were made in
1849
1873
  :param int [since]: the earliest time in ms to fetch orders for
@@ -1851,19 +1875,21 @@ class tokocrypto(Exchange, ImplicitAPI):
1851
1875
  :param dict [params]: extra parameters specific to the exchange API endpoint
1852
1876
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1853
1877
  """
1854
- request = {'type': 2} # -1 = all, 1 = open, 2 = closed
1878
+ request: dict = {'type': 2} # -1 = all, 1 = open, 2 = closed
1855
1879
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
1856
1880
 
1857
1881
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1858
1882
  """
1859
- :see: https://www.tokocrypto.com/apidocs/#cancel-order-signed
1883
+
1884
+ https://www.tokocrypto.com/apidocs/#cancel-order-signed
1885
+
1860
1886
  cancels an open order
1861
1887
  :param str id: order id
1862
1888
  :param str symbol: unified symbol of the market the order was made in
1863
1889
  :param dict [params]: extra parameters specific to the exchange API endpoint
1864
1890
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1865
1891
  """
1866
- request = {
1892
+ request: dict = {
1867
1893
  'orderId': id,
1868
1894
  }
1869
1895
  response = self.privatePostOpenV1OrdersCancel(self.extend(request, params))
@@ -1894,12 +1920,14 @@ class tokocrypto(Exchange, ImplicitAPI):
1894
1920
  # "timestamp": 1662710683634
1895
1921
  # }
1896
1922
  #
1897
- rawOrder = self.safe_value(response, 'data', {})
1923
+ rawOrder = self.safe_dict(response, 'data', {})
1898
1924
  return self.parse_order(rawOrder)
1899
1925
 
1900
1926
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1901
1927
  """
1902
- :see: https://www.tokocrypto.com/apidocs/#account-trade-list-signed
1928
+
1929
+ https://www.tokocrypto.com/apidocs/#account-trade-list-signed
1930
+
1903
1931
  fetch all trades made by the user
1904
1932
  :param str symbol: unified market symbol
1905
1933
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1911,7 +1939,7 @@ class tokocrypto(Exchange, ImplicitAPI):
1911
1939
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
1912
1940
  self.load_markets()
1913
1941
  market = self.market(symbol)
1914
- request = {
1942
+ request: dict = {
1915
1943
  'symbol': market['id'],
1916
1944
  }
1917
1945
  endTime = self.safe_integer_2(params, 'until', 'endTime')
@@ -1949,20 +1977,22 @@ class tokocrypto(Exchange, ImplicitAPI):
1949
1977
  # }
1950
1978
  #
1951
1979
  data = self.safe_value(response, 'data', {})
1952
- trades = self.safe_value(data, 'list', [])
1980
+ trades = self.safe_list(data, 'list', [])
1953
1981
  return self.parse_trades(trades, market, since, limit)
1954
1982
 
1955
- def fetch_deposit_address(self, code: str, params={}):
1983
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1956
1984
  """
1957
- :see: https://www.tokocrypto.com/apidocs/#deposit-address-signed
1958
1985
  fetch the deposit address for a currency associated with self account
1986
+
1987
+ https://www.tokocrypto.com/apidocs/#deposit-address-signed
1988
+
1959
1989
  :param str code: unified currency code
1960
1990
  :param dict [params]: extra parameters specific to the exchange API endpoint
1961
1991
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1962
1992
  """
1963
1993
  self.load_markets()
1964
1994
  currency = self.currency(code)
1965
- request = {
1995
+ request: dict = {
1966
1996
  'asset': currency['id'],
1967
1997
  # 'network': 'ETH', # 'BSC', 'XMR', you can get network and isDefault in networkList in the response of sapiGetCapitalConfigDetail
1968
1998
  }
@@ -1997,16 +2027,18 @@ class tokocrypto(Exchange, ImplicitAPI):
1997
2027
  tag = None
1998
2028
  self.check_address(address)
1999
2029
  return {
2030
+ 'info': response,
2000
2031
  'currency': code,
2032
+ 'network': self.safe_string(data, 'network'),
2001
2033
  'address': address,
2002
2034
  'tag': tag,
2003
- 'network': self.safe_string(data, 'network'),
2004
- 'info': response,
2005
2035
  }
2006
2036
 
2007
2037
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2008
2038
  """
2009
- :see: https://www.tokocrypto.com/apidocs/#deposit-history-signed
2039
+
2040
+ https://www.tokocrypto.com/apidocs/#deposit-history-signed
2041
+
2010
2042
  fetch all deposits made to an account
2011
2043
  :param str code: unified currency code
2012
2044
  :param int [since]: the earliest time in ms to fetch deposits for
@@ -2017,7 +2049,7 @@ class tokocrypto(Exchange, ImplicitAPI):
2017
2049
  """
2018
2050
  self.load_markets()
2019
2051
  currency = None
2020
- request = {}
2052
+ request: dict = {}
2021
2053
  until = self.safe_integer(params, 'until')
2022
2054
  if code is not None:
2023
2055
  currency = self.currency(code)
@@ -2056,12 +2088,14 @@ class tokocrypto(Exchange, ImplicitAPI):
2056
2088
  # }
2057
2089
  #
2058
2090
  data = self.safe_value(response, 'data', {})
2059
- deposits = self.safe_value(data, 'list', [])
2091
+ deposits = self.safe_list(data, 'list', [])
2060
2092
  return self.parse_transactions(deposits, currency, since, limit)
2061
2093
 
2062
2094
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2063
2095
  """
2064
- :see: https://www.tokocrypto.com/apidocs/#withdraw-signed
2096
+
2097
+ https://www.tokocrypto.com/apidocs/#withdraw-signed
2098
+
2065
2099
  fetch all withdrawals made from an account
2066
2100
  :param str code: unified currency code
2067
2101
  :param int [since]: the earliest time in ms to fetch withdrawals for
@@ -2070,7 +2104,7 @@ class tokocrypto(Exchange, ImplicitAPI):
2070
2104
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2071
2105
  """
2072
2106
  self.load_markets()
2073
- request = {}
2107
+ request: dict = {}
2074
2108
  currency = None
2075
2109
  if code is not None:
2076
2110
  currency = self.currency(code)
@@ -2108,11 +2142,11 @@ class tokocrypto(Exchange, ImplicitAPI):
2108
2142
  # }
2109
2143
  #
2110
2144
  data = self.safe_value(response, 'data', {})
2111
- withdrawals = self.safe_value(data, 'list', [])
2145
+ withdrawals = self.safe_list(data, 'list', [])
2112
2146
  return self.parse_transactions(withdrawals, currency, since, limit)
2113
2147
 
2114
2148
  def parse_transaction_status_by_type(self, status, type=None):
2115
- statusesByType = {
2149
+ statusesByType: dict = {
2116
2150
  'deposit': {
2117
2151
  '0': 'pending',
2118
2152
  '1': 'ok',
@@ -2130,7 +2164,7 @@ class tokocrypto(Exchange, ImplicitAPI):
2130
2164
  statuses = self.safe_value(statusesByType, type, {})
2131
2165
  return self.safe_string(statuses, status, status)
2132
2166
 
2133
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
2167
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
2134
2168
  #
2135
2169
  # fetchDeposits
2136
2170
  #
@@ -2237,9 +2271,11 @@ class tokocrypto(Exchange, ImplicitAPI):
2237
2271
  'fee': fee,
2238
2272
  }
2239
2273
 
2240
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2274
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2241
2275
  """
2242
- :see: https://www.tokocrypto.com/apidocs/#withdraw-signed
2276
+
2277
+ https://www.tokocrypto.com/apidocs/#withdraw-signed
2278
+
2243
2279
  make a withdrawal
2244
2280
  :param str code: unified currency code
2245
2281
  :param float amount: the amount to withdraw
@@ -2252,7 +2288,7 @@ class tokocrypto(Exchange, ImplicitAPI):
2252
2288
  self.load_markets()
2253
2289
  self.check_address(address)
2254
2290
  currency = self.currency(code)
2255
- request = {
2291
+ request: dict = {
2256
2292
  'asset': currency['id'],
2257
2293
  # 'clientId': 'string', # # client's custom id for withdraw order, server does not check it's uniqueness, automatically generated if not sent
2258
2294
  # 'network': 'string',
@@ -2331,7 +2367,7 @@ class tokocrypto(Exchange, ImplicitAPI):
2331
2367
  url += '?' + self.urlencode(params)
2332
2368
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2333
2369
 
2334
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2370
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2335
2371
  if (code == 418) or (code == 429):
2336
2372
  raise DDoSProtection(self.id + ' ' + str(code) + ' ' + reason + ' ' + body)
2337
2373
  # error response in a form: {"code": -1013, "msg": "Invalid quantity."}