ccxt 4.2.76__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 +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -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 +3513 -1511
  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 +3105 -881
  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 +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  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 +403 -150
  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 +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  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 +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  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 +1473 -464
  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 +1634 -269
  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 +1050 -355
  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 +1777 -455
  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 +1155 -295
  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 +1729 -482
  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 +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  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 +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  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 +403 -150
  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 +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  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 +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  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 +1633 -269
  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 +1050 -355
  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 +1777 -455
  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 +63 -15
  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 +204 -82
  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 +967 -661
  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 +168 -32
  309. ccxt/pro/exmo.py +253 -21
  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 +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  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 +486 -70
  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} +465 -407
  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} +465 -409
  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 +1155 -295
  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.76.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.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/bitflyer.py CHANGED
@@ -6,11 +6,12 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.bitflyer import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, FundingRate, Trade, TradingFeeInterface, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import ArgumentsRequired
13
13
  from ccxt.base.errors import OrderNotFound
14
+ from ccxt.base.errors import OnMaintenance
14
15
  from ccxt.base.decimal_to_precision import TICK_SIZE
15
16
  from ccxt.base.precise import Precise
16
17
 
@@ -38,6 +39,9 @@ class bitflyer(Exchange, ImplicitAPI):
38
39
  'fetchBalance': True,
39
40
  'fetchClosedOrders': 'emulated',
40
41
  'fetchDeposits': True,
42
+ 'fetchFundingRate': True,
43
+ 'fetchFundingRateHistory': False,
44
+ 'fetchFundingRates': False,
41
45
  'fetchMarginMode': False,
42
46
  'fetchMarkets': True,
43
47
  'fetchMyTrades': True,
@@ -58,7 +62,7 @@ class bitflyer(Exchange, ImplicitAPI):
58
62
  'withdraw': True,
59
63
  },
60
64
  'urls': {
61
- 'logo': 'https://user-images.githubusercontent.com/1294454/28051642-56154182-660e-11e7-9b0d-6042d1e6edd8.jpg',
65
+ 'logo': 'https://github.com/user-attachments/assets/d0217747-e54d-4533-8416-0d553dca74bb',
62
66
  'api': {
63
67
  'rest': 'https://api.{hostname}',
64
68
  },
@@ -77,6 +81,7 @@ class bitflyer(Exchange, ImplicitAPI):
77
81
  'gethealth',
78
82
  'getboardstate',
79
83
  'getchats',
84
+ 'getfundingrate',
80
85
  ],
81
86
  },
82
87
  'private': {
@@ -118,13 +123,89 @@ class bitflyer(Exchange, ImplicitAPI):
118
123
  },
119
124
  },
120
125
  'precisionMode': TICK_SIZE,
126
+ 'features': {
127
+ 'spot': {
128
+ 'sandbox': False,
129
+ 'createOrder': {
130
+ 'marginMode': False,
131
+ 'triggerPrice': False,
132
+ 'triggerPriceType': None,
133
+ 'triggerDirection': False,
134
+ 'stopLossPrice': False,
135
+ 'takeProfitPrice': False,
136
+ 'attachedStopLossTakeProfit': None,
137
+ 'timeInForce': {
138
+ 'IOC': True,
139
+ 'FOK': True,
140
+ 'PO': True,
141
+ 'GTD': True, # todo implement
142
+ },
143
+ 'hedged': False,
144
+ 'trailing': False, # todo recheck
145
+ 'leverage': False,
146
+ 'marketBuyRequiresPrice': False,
147
+ 'marketBuyByCost': False,
148
+ 'selfTradePrevention': False,
149
+ 'iceberg': False,
150
+ },
151
+ 'createOrders': None,
152
+ 'fetchMyTrades': {
153
+ 'marginMode': False,
154
+ 'limit': 100,
155
+ 'daysBack': None,
156
+ 'untilDays': None,
157
+ },
158
+ 'fetchOrder': {
159
+ 'marginMode': False,
160
+ 'trigger': False,
161
+ 'trailing': False,
162
+ },
163
+ 'fetchOpenOrders': {
164
+ 'marginMode': False,
165
+ 'limit': 100,
166
+ 'trigger': False,
167
+ 'trailing': False,
168
+ },
169
+ 'fetchOrders': {
170
+ 'marginMode': False,
171
+ 'limit': 100,
172
+ 'daysBack': None,
173
+ 'untilDays': None,
174
+ 'trigger': False,
175
+ 'trailing': False,
176
+ },
177
+ 'fetchClosedOrders': {
178
+ 'marginMode': False,
179
+ 'limit': 100,
180
+ 'daysBack': None,
181
+ 'daysBackCanceled': None,
182
+ 'untilDays': None,
183
+ 'trigger': False,
184
+ 'trailing': False,
185
+ },
186
+ 'fetchOHLCV': None,
187
+ },
188
+ 'swap': {
189
+ 'linear': None,
190
+ 'inverse': None,
191
+ },
192
+ 'future': {
193
+ 'linear': None,
194
+ 'inverse': None,
195
+ },
196
+ },
197
+ 'exceptions': {
198
+ 'exact': {
199
+ '-2': OnMaintenance, # {"status":-2,"error_message":"Under maintenance","data":null}
200
+ },
201
+ },
121
202
  })
122
203
 
123
204
  def parse_expiry_date(self, expiry):
124
205
  day = expiry[0:2]
125
206
  monthName = expiry[2:5]
126
207
  year = expiry[5:9]
127
- months = {
208
+ months: dict = {
128
209
  'JAN': '01',
129
210
  'FEB': '02',
130
211
  'MAR': '03',
@@ -141,16 +222,18 @@ class bitflyer(Exchange, ImplicitAPI):
141
222
  month = self.safe_string(months, monthName)
142
223
  return self.parse8601(year + '-' + month + '-' + day + 'T00:00:00Z')
143
224
 
144
- def safe_market(self, marketId=None, market=None, delimiter=None, marketType=None):
225
+ def safe_market(self, marketId: Str = None, market: Market = None, delimiter: Str = None, marketType: Str = None) -> MarketInterface:
145
226
  # Bitflyer has a different type of conflict in markets, because
146
227
  # some of their ids(ETH/BTC and BTC/JPY) are duplicated in US, EU and JP.
147
228
  # Since they're the same we just need to return one
148
229
  return super(bitflyer, self).safe_market(marketId, market, delimiter, 'spot')
149
230
 
150
- def fetch_markets(self, params={}):
231
+ def fetch_markets(self, params={}) -> List[Market]:
151
232
  """
152
233
  retrieves data on all markets for bitflyer
153
- :see: https://lightning.bitflyer.com/docs?lang=en#market-list
234
+
235
+ https://lightning.bitflyer.com/docs?lang=en#market-list
236
+
154
237
  :param dict [params]: extra parameters specific to the exchange API endpoint
155
238
  :returns dict[]: an array of objects representing market data
156
239
  """
@@ -294,7 +377,7 @@ class bitflyer(Exchange, ImplicitAPI):
294
377
  return result
295
378
 
296
379
  def parse_balance(self, response) -> Balances:
297
- result = {'info': response}
380
+ result: dict = {'info': response}
298
381
  for i in range(0, len(response)):
299
382
  balance = response[i]
300
383
  currencyId = self.safe_string(balance, 'currency_code')
@@ -308,7 +391,9 @@ class bitflyer(Exchange, ImplicitAPI):
308
391
  def fetch_balance(self, params={}) -> Balances:
309
392
  """
310
393
  query for balance and get the amount of funds available for trading or funds locked in orders
311
- :see: https://lightning.bitflyer.com/docs?lang=en#get-account-asset-balance
394
+
395
+ https://lightning.bitflyer.com/docs?lang=en#get-account-asset-balance
396
+
312
397
  :param dict [params]: extra parameters specific to the exchange API endpoint
313
398
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
314
399
  """
@@ -338,7 +423,9 @@ class bitflyer(Exchange, ImplicitAPI):
338
423
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
339
424
  """
340
425
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
341
- :see: https://lightning.bitflyer.com/docs?lang=en#order-book
426
+
427
+ https://lightning.bitflyer.com/docs?lang=en#order-book
428
+
342
429
  :param str symbol: unified symbol of the market to fetch the order book for
343
430
  :param int [limit]: the maximum amount of order book entries to return
344
431
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -346,13 +433,13 @@ class bitflyer(Exchange, ImplicitAPI):
346
433
  """
347
434
  self.load_markets()
348
435
  market = self.market(symbol)
349
- request = {
436
+ request: dict = {
350
437
  'product_code': market['id'],
351
438
  }
352
439
  orderbook = self.publicGetGetboard(self.extend(request, params))
353
440
  return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price', 'size')
354
441
 
355
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
442
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
356
443
  symbol = self.safe_symbol(None, market)
357
444
  timestamp = self.parse8601(self.safe_string(ticker, 'timestamp'))
358
445
  last = self.safe_string(ticker, 'ltp')
@@ -382,20 +469,22 @@ class bitflyer(Exchange, ImplicitAPI):
382
469
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
383
470
  """
384
471
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
385
- :see: https://lightning.bitflyer.com/docs?lang=en#ticker
472
+
473
+ https://lightning.bitflyer.com/docs?lang=en#ticker
474
+
386
475
  :param str symbol: unified symbol of the market to fetch the ticker for
387
476
  :param dict [params]: extra parameters specific to the exchange API endpoint
388
477
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
389
478
  """
390
479
  self.load_markets()
391
480
  market = self.market(symbol)
392
- request = {
481
+ request: dict = {
393
482
  'product_code': market['id'],
394
483
  }
395
484
  response = self.publicGetGetticker(self.extend(request, params))
396
485
  return self.parse_ticker(response, market)
397
486
 
398
- def parse_trade(self, trade, market: Market = None) -> Trade:
487
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
399
488
  #
400
489
  # fetchTrades(public) v1
401
490
  #
@@ -457,7 +546,9 @@ class bitflyer(Exchange, ImplicitAPI):
457
546
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
458
547
  """
459
548
  get the list of most recent trades for a particular symbol
460
- :see: https://lightning.bitflyer.com/docs?lang=en#list-executions
549
+
550
+ https://lightning.bitflyer.com/docs?lang=en#list-executions
551
+
461
552
  :param str symbol: unified symbol of the market to fetch trades for
462
553
  :param int [since]: timestamp in ms of the earliest trade to fetch
463
554
  :param int [limit]: the maximum amount of trades to fetch
@@ -466,7 +557,7 @@ class bitflyer(Exchange, ImplicitAPI):
466
557
  """
467
558
  self.load_markets()
468
559
  market = self.market(symbol)
469
- request = {
560
+ request: dict = {
470
561
  'product_code': market['id'],
471
562
  }
472
563
  if limit is not None:
@@ -487,17 +578,19 @@ class bitflyer(Exchange, ImplicitAPI):
487
578
  #
488
579
  return self.parse_trades(response, market, since, limit)
489
580
 
490
- def fetch_trading_fee(self, symbol: str, params={}):
581
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
491
582
  """
492
583
  fetch the trading fees for a market
493
- :see: https://lightning.bitflyer.com/docs?lang=en#get-trading-commission
584
+
585
+ https://lightning.bitflyer.com/docs?lang=en#get-trading-commission
586
+
494
587
  :param str symbol: unified market symbol
495
588
  :param dict [params]: extra parameters specific to the exchange API endpoint
496
589
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
497
590
  """
498
591
  self.load_markets()
499
592
  market = self.market(symbol)
500
- request = {
593
+ request: dict = {
501
594
  'product_code': market['id'],
502
595
  }
503
596
  response = self.privateGetGettradingcommission(self.extend(request, params))
@@ -512,22 +605,26 @@ class bitflyer(Exchange, ImplicitAPI):
512
605
  'symbol': market['symbol'],
513
606
  'maker': fee,
514
607
  'taker': fee,
608
+ 'percentage': None,
609
+ 'tierBased': None,
515
610
  }
516
611
 
517
612
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
518
613
  """
519
614
  create a trade order
520
- :see: https://lightning.bitflyer.com/docs?lang=en#send-a-new-order
615
+
616
+ https://lightning.bitflyer.com/docs?lang=en#send-a-new-order
617
+
521
618
  :param str symbol: unified symbol of the market to create an order in
522
619
  :param str type: 'market' or 'limit'
523
620
  :param str side: 'buy' or 'sell'
524
621
  :param float amount: how much of currency you want to trade in units of base currency
525
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
622
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
526
623
  :param dict [params]: extra parameters specific to the exchange API endpoint
527
624
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
528
625
  """
529
626
  self.load_markets()
530
- request = {
627
+ request: dict = {
531
628
  'product_code': self.market_id(symbol),
532
629
  'child_order_type': type.upper(),
533
630
  'side': side.upper(),
@@ -545,7 +642,9 @@ class bitflyer(Exchange, ImplicitAPI):
545
642
  def cancel_order(self, id: str, symbol: Str = None, params={}):
546
643
  """
547
644
  cancels an open order
548
- :see: https://lightning.bitflyer.com/docs?lang=en#cancel-order
645
+
646
+ https://lightning.bitflyer.com/docs?lang=en#cancel-order
647
+
549
648
  :param str id: order id
550
649
  :param str symbol: unified symbol of the market the order was made in
551
650
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -554,14 +653,20 @@ class bitflyer(Exchange, ImplicitAPI):
554
653
  if symbol is None:
555
654
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
556
655
  self.load_markets()
557
- request = {
656
+ request: dict = {
558
657
  'product_code': self.market_id(symbol),
559
658
  'child_order_acceptance_id': id,
560
659
  }
561
- return self.privatePostCancelchildorder(self.extend(request, params))
660
+ response = self.privatePostCancelchildorder(self.extend(request, params))
661
+ #
662
+ # 200 OK.
663
+ #
664
+ return self.safe_order({
665
+ 'info': response,
666
+ })
562
667
 
563
- def parse_order_status(self, status):
564
- statuses = {
668
+ def parse_order_status(self, status: Str):
669
+ statuses: dict = {
565
670
  'ACTIVE': 'open',
566
671
  'COMPLETED': 'closed',
567
672
  'CANCELED': 'canceled',
@@ -570,7 +675,7 @@ class bitflyer(Exchange, ImplicitAPI):
570
675
  }
571
676
  return self.safe_string(statuses, status, status)
572
677
 
573
- def parse_order(self, order, market: Market = None) -> Order:
678
+ def parse_order(self, order: dict, market: Market = None) -> Order:
574
679
  timestamp = self.parse8601(self.safe_string(order, 'child_order_date'))
575
680
  price = self.safe_string(order, 'price')
576
681
  amount = self.safe_string(order, 'size')
@@ -604,7 +709,6 @@ class bitflyer(Exchange, ImplicitAPI):
604
709
  'postOnly': None,
605
710
  'side': side,
606
711
  'price': price,
607
- 'stopPrice': None,
608
712
  'triggerPrice': None,
609
713
  'cost': None,
610
714
  'amount': amount,
@@ -618,7 +722,9 @@ class bitflyer(Exchange, ImplicitAPI):
618
722
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
619
723
  """
620
724
  fetches information on multiple orders made by the user
621
- :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
725
+
726
+ https://lightning.bitflyer.com/docs?lang=en#list-orders
727
+
622
728
  :param str symbol: unified market symbol of the market orders were made in
623
729
  :param int [since]: the earliest time in ms to fetch orders for
624
730
  :param int [limit]: the maximum number of order structures to retrieve
@@ -629,7 +735,7 @@ class bitflyer(Exchange, ImplicitAPI):
629
735
  raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
630
736
  self.load_markets()
631
737
  market = self.market(symbol)
632
- request = {
738
+ request: dict = {
633
739
  'product_code': market['id'],
634
740
  'count': limit,
635
741
  }
@@ -642,14 +748,16 @@ class bitflyer(Exchange, ImplicitAPI):
642
748
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
643
749
  """
644
750
  fetch all unfilled currently open orders
645
- :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
751
+
752
+ https://lightning.bitflyer.com/docs?lang=en#list-orders
753
+
646
754
  :param str symbol: unified market symbol
647
755
  :param int [since]: the earliest time in ms to fetch open orders for
648
756
  :param int [limit]: the maximum number of open orders structures to retrieve
649
757
  :param dict [params]: extra parameters specific to the exchange API endpoint
650
758
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
651
759
  """
652
- request = {
760
+ request: dict = {
653
761
  'child_order_state': 'ACTIVE',
654
762
  }
655
763
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -657,14 +765,16 @@ class bitflyer(Exchange, ImplicitAPI):
657
765
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
658
766
  """
659
767
  fetches information on multiple closed orders made by the user
660
- :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
768
+
769
+ https://lightning.bitflyer.com/docs?lang=en#list-orders
770
+
661
771
  :param str symbol: unified market symbol of the market orders were made in
662
772
  :param int [since]: the earliest time in ms to fetch orders for
663
773
  :param int [limit]: the maximum number of order structures to retrieve
664
774
  :param dict [params]: extra parameters specific to the exchange API endpoint
665
775
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
666
776
  """
667
- request = {
777
+ request: dict = {
668
778
  'child_order_state': 'COMPLETED',
669
779
  }
670
780
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -672,7 +782,10 @@ class bitflyer(Exchange, ImplicitAPI):
672
782
  def fetch_order(self, id: str, symbol: Str = None, params={}):
673
783
  """
674
784
  fetches information on an order made by the user
675
- :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
785
+
786
+ https://lightning.bitflyer.com/docs?lang=en#list-orders
787
+
788
+ :param str id: the order id
676
789
  :param str symbol: unified symbol of the market the order was made in
677
790
  :param dict [params]: extra parameters specific to the exchange API endpoint
678
791
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -688,7 +801,9 @@ class bitflyer(Exchange, ImplicitAPI):
688
801
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
689
802
  """
690
803
  fetch all trades made by the user
691
- :see: https://lightning.bitflyer.com/docs?lang=en#list-executions
804
+
805
+ https://lightning.bitflyer.com/docs?lang=en#list-executions
806
+
692
807
  :param str symbol: unified market symbol
693
808
  :param int [since]: the earliest time in ms to fetch trades for
694
809
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -699,7 +814,7 @@ class bitflyer(Exchange, ImplicitAPI):
699
814
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
700
815
  self.load_markets()
701
816
  market = self.market(symbol)
702
- request = {
817
+ request: dict = {
703
818
  'product_code': market['id'],
704
819
  }
705
820
  if limit is not None:
@@ -724,7 +839,9 @@ class bitflyer(Exchange, ImplicitAPI):
724
839
  def fetch_positions(self, symbols: Strings = None, params={}):
725
840
  """
726
841
  fetch all open positions
727
- :see: https://lightning.bitflyer.com/docs?lang=en#get-open-interest-summary
842
+
843
+ https://lightning.bitflyer.com/docs?lang=en#get-open-interest-summary
844
+
728
845
  :param str[] symbols: list of unified market symbols
729
846
  :param dict [params]: extra parameters specific to the exchange API endpoint
730
847
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
@@ -732,7 +849,7 @@ class bitflyer(Exchange, ImplicitAPI):
732
849
  if symbols is None:
733
850
  raise ArgumentsRequired(self.id + ' fetchPositions() requires a `symbols` argument, exactly one symbol in an array')
734
851
  self.load_markets()
735
- request = {
852
+ request: dict = {
736
853
  'product_code': self.market_ids(symbols),
737
854
  }
738
855
  response = self.privateGetGetpositions(self.extend(request, params))
@@ -756,10 +873,12 @@ class bitflyer(Exchange, ImplicitAPI):
756
873
  # todo unify parsePosition/parsePositions
757
874
  return response
758
875
 
759
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
876
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
760
877
  """
761
878
  make a withdrawal
762
- :see: https://lightning.bitflyer.com/docs?lang=en#withdrawing-funds
879
+
880
+ https://lightning.bitflyer.com/docs?lang=en#withdrawing-funds
881
+
763
882
  :param str code: unified currency code
764
883
  :param float amount: the amount to withdraw
765
884
  :param str address: the address to withdraw to
@@ -772,7 +891,7 @@ class bitflyer(Exchange, ImplicitAPI):
772
891
  if code != 'JPY' and code != 'USD' and code != 'EUR':
773
892
  raise ExchangeError(self.id + ' allows withdrawing JPY, USD, EUR only, ' + code + ' is not supported')
774
893
  currency = self.currency(code)
775
- request = {
894
+ request: dict = {
776
895
  'currency_code': currency['id'],
777
896
  'amount': amount,
778
897
  # 'bank_account_id': 1234,
@@ -788,7 +907,9 @@ class bitflyer(Exchange, ImplicitAPI):
788
907
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
789
908
  """
790
909
  fetch all deposits made to an account
791
- :see: https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-deposit-history
910
+
911
+ https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-deposit-history
912
+
792
913
  :param str code: unified currency code
793
914
  :param int [since]: the earliest time in ms to fetch deposits for
794
915
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -797,7 +918,7 @@ class bitflyer(Exchange, ImplicitAPI):
797
918
  """
798
919
  self.load_markets()
799
920
  currency = None
800
- request = {}
921
+ request: dict = {}
801
922
  if code is not None:
802
923
  currency = self.currency(code)
803
924
  if limit is not None:
@@ -822,7 +943,9 @@ class bitflyer(Exchange, ImplicitAPI):
822
943
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
823
944
  """
824
945
  fetch all withdrawals made from an account
825
- :see: https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-transaction-history
946
+
947
+ https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-transaction-history
948
+
826
949
  :param str code: unified currency code
827
950
  :param int [since]: the earliest time in ms to fetch withdrawals for
828
951
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -831,7 +954,7 @@ class bitflyer(Exchange, ImplicitAPI):
831
954
  """
832
955
  self.load_markets()
833
956
  currency = None
834
- request = {}
957
+ request: dict = {}
835
958
  if code is not None:
836
959
  currency = self.currency(code)
837
960
  if limit is not None:
@@ -856,20 +979,20 @@ class bitflyer(Exchange, ImplicitAPI):
856
979
  return self.parse_transactions(response, currency, since, limit)
857
980
 
858
981
  def parse_deposit_status(self, status):
859
- statuses = {
982
+ statuses: dict = {
860
983
  'PENDING': 'pending',
861
984
  'COMPLETED': 'ok',
862
985
  }
863
986
  return self.safe_string(statuses, status, status)
864
987
 
865
988
  def parse_withdrawal_status(self, status):
866
- statuses = {
989
+ statuses: dict = {
867
990
  'PENDING': 'pending',
868
991
  'COMPLETED': 'ok',
869
992
  }
870
993
  return self.safe_string(statuses, status, status)
871
994
 
872
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
995
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
873
996
  #
874
997
  # fetchDeposits
875
998
  #
@@ -948,6 +1071,60 @@ class bitflyer(Exchange, ImplicitAPI):
948
1071
  'fee': fee,
949
1072
  }
950
1073
 
1074
+ def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1075
+ """
1076
+ fetch the current funding rate
1077
+
1078
+ https://lightning.bitflyer.com/docs#funding-rate
1079
+
1080
+ :param str symbol: unified market symbol
1081
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1082
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1083
+ """
1084
+ self.load_markets()
1085
+ market = self.market(symbol)
1086
+ request: dict = {
1087
+ 'product_code': market['id'],
1088
+ }
1089
+ response = self.publicGetGetfundingrate(self.extend(request, params))
1090
+ #
1091
+ # {
1092
+ # "current_funding_rate": -0.003750000000
1093
+ # "next_funding_rate_settledate": "2024-04-15T13:00:00"
1094
+ # }
1095
+ #
1096
+ return self.parse_funding_rate(response, market)
1097
+
1098
+ def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
1099
+ #
1100
+ # {
1101
+ # "current_funding_rate": -0.003750000000
1102
+ # "next_funding_rate_settledate": "2024-04-15T13:00:00"
1103
+ # }
1104
+ #
1105
+ nextFundingDatetime = self.safe_string(contract, 'next_funding_rate_settledate')
1106
+ nextFundingTimestamp = self.parse8601(nextFundingDatetime)
1107
+ return {
1108
+ 'info': contract,
1109
+ 'symbol': self.safe_string(market, 'symbol'),
1110
+ 'markPrice': None,
1111
+ 'indexPrice': None,
1112
+ 'interestRate': None,
1113
+ 'estimatedSettlePrice': None,
1114
+ 'timestamp': None,
1115
+ 'datetime': None,
1116
+ 'fundingRate': None,
1117
+ 'fundingTimestamp': None,
1118
+ 'fundingDatetime': None,
1119
+ 'nextFundingRate': self.safe_number(contract, 'current_funding_rate'),
1120
+ 'nextFundingTimestamp': nextFundingTimestamp,
1121
+ 'nextFundingDatetime': self.iso8601(nextFundingTimestamp),
1122
+ 'previousFundingRate': None,
1123
+ 'previousFundingTimestamp': None,
1124
+ 'previousFundingDatetime': None,
1125
+ 'interval': None,
1126
+ }
1127
+
951
1128
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
952
1129
  request = '/' + self.version + '/'
953
1130
  if api == 'private':
@@ -973,3 +1150,15 @@ class bitflyer(Exchange, ImplicitAPI):
973
1150
  'Content-Type': 'application/json',
974
1151
  }
975
1152
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1153
+
1154
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1155
+ if response is None:
1156
+ return None # fallback to the default error handler
1157
+ feedback = self.id + ' ' + body
1158
+ # i.e. {"status":-2,"error_message":"Under maintenance","data":null}
1159
+ errorMessage = self.safe_string(response, 'error_message')
1160
+ statusCode = self.safe_integer(response, 'status')
1161
+ if errorMessage is not None:
1162
+ self.throw_exactly_matched_exception(self.exceptions['exact'], statusCode, feedback)
1163
+ raise ExchangeError(feedback)
1164
+ return None