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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3205 -937
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1525 -573
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +223 -97
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3205 -937
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1525 -573
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +223 -97
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +143 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
@@ -4,14 +4,14 @@
4
4
  # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
5
 
6
6
  import ccxt.async_support
7
- from ccxt.async_support.base.ws.cache import ArrayCache
7
+ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheByTimestamp
8
8
  import hashlib
9
- from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, Trade
9
+ from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
- from ccxt.base.errors import NotSupported
14
13
  from ccxt.base.errors import AuthenticationError
14
+ from ccxt.base.errors import NotSupported
15
15
 
16
16
 
17
17
  class coinbaseinternational(ccxt.async_support.coinbaseinternational):
@@ -27,12 +27,12 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
27
27
  'watchTicker': True,
28
28
  'watchBalance': False,
29
29
  'watchMyTrades': False,
30
- 'watchOHLCV': False,
30
+ 'watchOHLCV': True,
31
31
  'watchOHLCVForSymbols': False,
32
32
  'watchOrders': False,
33
33
  'watchOrdersForSymbols': False,
34
34
  'watchPositions': False,
35
- 'watchTickers': False,
35
+ 'watchTickers': True,
36
36
  'createOrderWs': False,
37
37
  'editOrderWs': False,
38
38
  'cancelOrderWs': False,
@@ -58,6 +58,14 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
58
58
  'tradesLimit': 1000,
59
59
  'ordersLimit': 1000,
60
60
  'myTradesLimit': 1000,
61
+ 'timeframes': {
62
+ '1m': 'CANDLES_ONE_MINUTE',
63
+ '5m': 'CANDLES_FIVE_MINUTES',
64
+ '30m': 'CANDLES_THIRTY_MINUTES',
65
+ '1h': 'CANDLES_ONE_HOUR',
66
+ '2h': 'CANDLES_TWO_HOURS',
67
+ '1d': 'CANDLES_ONE_DAY',
68
+ },
61
69
  },
62
70
  'exceptions': {
63
71
  'exact': {
@@ -68,26 +76,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
68
76
 
69
77
  async def subscribe(self, name: str, symbols: Strings = None, params={}):
70
78
  """
71
- * @ignore
79
+ @ignore
72
80
  subscribes to a websocket channel
73
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
81
+
82
+ https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
83
+
74
84
  :param str name: the name of the channel
75
85
  :param str[] [symbols]: unified market symbol
76
86
  :param dict [params]: extra parameters specific to the exchange API endpoint
77
87
  :returns dict: subscription to a websocket channel
78
88
  """
89
+ await self.load_markets()
79
90
  self.check_required_credentials()
80
91
  market = None
81
92
  messageHash = name
82
- productIds = []
93
+ productIds = None
83
94
  if symbols is None:
84
- symbols = self.symbols
95
+ symbols = self.get_active_symbols()
85
96
  symbolsLength = len(symbols)
97
+ messageHashes = []
86
98
  if symbolsLength > 1:
87
99
  parsedSymbols = self.market_symbols(symbols)
88
100
  marketIds = self.market_ids(parsedSymbols)
89
101
  productIds = marketIds
90
- messageHash = messageHash + '::' + ','.join(parsedSymbols)
102
+ for i in range(0, len(parsedSymbols)):
103
+ messageHashes.append(name + '::' + parsedSymbols[i])
104
+ # messageHash = messageHash + '::' + ','.join(parsedSymbols)
91
105
  elif symbolsLength == 1:
92
106
  market = self.market(symbols[0])
93
107
  messageHash = name + '::' + market['symbol']
@@ -98,27 +112,34 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
98
112
  timestamp = str(self.nonce())
99
113
  auth = timestamp + self.apiKey + 'CBINTLMD' + self.password
100
114
  signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
101
- subscribe = {
115
+ subscribe: dict = {
102
116
  'type': 'SUBSCRIBE',
103
- 'product_ids': productIds,
117
+ # 'product_ids': productIds,
104
118
  'channels': [name],
105
119
  'time': timestamp,
106
120
  'key': self.apiKey,
107
121
  'passphrase': self.password,
108
122
  'signature': signature,
109
123
  }
124
+ if productIds is not None:
125
+ subscribe['product_ids'] = productIds
126
+ if symbolsLength > 1:
127
+ return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
110
128
  return await self.watch(url, messageHash, self.extend(subscribe, params), messageHash)
111
129
 
112
130
  async def subscribe_multiple(self, name: str, symbols: Strings = None, params={}):
113
131
  """
114
- * @ignore
132
+ @ignore
115
133
  subscribes to a websocket channel using watchMultiple
116
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
134
+
135
+ https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
136
+
117
137
  :param str name: the name of the channel
118
- :param string|str[] [symbol]: unified market symbol
138
+ :param string|str[] [symbols]: unified market symbol
119
139
  :param dict [params]: extra parameters specific to the exchange API endpoint
120
140
  :returns dict: subscription to a websocket channel
121
141
  """
142
+ await self.load_markets()
122
143
  self.check_required_credentials()
123
144
  if self.is_empty(symbols):
124
145
  symbols = self.symbols
@@ -137,7 +158,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
137
158
  timestamp = self.number_to_string(self.seconds())
138
159
  auth = timestamp + self.apiKey + 'CBINTLMD' + self.password
139
160
  signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
140
- subscribe = {
161
+ subscribe: dict = {
141
162
  'type': 'SUBSCRIBE',
142
163
  'time': timestamp,
143
164
  'product_ids': productIds,
@@ -148,38 +169,85 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
148
169
  }
149
170
  return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
150
171
 
151
- async def watch_funding_rate(self, symbol: str, params={}) -> {}:
172
+ async def watch_funding_rate(self, symbol: str, params={}) -> FundingRate:
152
173
  """
153
174
  watch the current funding rate
154
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
175
+
176
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
177
+
155
178
  :param str symbol: unified market symbol
156
179
  :param dict [params]: extra parameters specific to the exchange API endpoint
157
180
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
158
181
  """
182
+ await self.load_markets()
159
183
  return await self.subscribe('RISK', [symbol], params)
160
184
 
161
- async def watch_funding_rates(self, symbols: List[str], params={}) -> {}:
185
+ async def watch_funding_rates(self, symbols: List[str], params={}) -> FundingRates:
162
186
  """
163
187
  watch the funding rate for multiple markets
164
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
188
+
189
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
190
+
165
191
  :param str[]|None symbols: list of unified market symbols
166
192
  :param dict [params]: extra parameters specific to the exchange API endpoint
167
193
  :returns dict: a dictionary of `funding rates structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexe by market symbols
168
194
  """
169
- return await self.subscribe_multiple('RISK', symbols, params)
195
+ await self.load_markets()
196
+ fundingRate = await self.subscribe_multiple('RISK', symbols, params)
197
+ symbol = self.safe_string(fundingRate, 'symbol')
198
+ if self.newUpdates:
199
+ result: dict = {}
200
+ result[symbol] = fundingRate
201
+ return result
202
+ return self.filter_by_array(self.fundingRates, 'symbol', symbols)
170
203
 
171
204
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
172
205
  """
173
206
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
174
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
207
+
208
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
209
+
175
210
  :param str [symbol]: unified symbol of the market to fetch the ticker for
176
211
  :param dict [params]: extra parameters specific to the exchange API endpoint
212
+ :param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'LEVEL1'
177
213
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
178
214
  """
215
+ await self.load_markets()
179
216
  channel = None
180
217
  channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'LEVEL1')
181
218
  return await self.subscribe(channel, [symbol], params)
182
219
 
220
+ def get_active_symbols(self):
221
+ symbols = self.symbols
222
+ output = []
223
+ for i in range(0, len(symbols)):
224
+ symbol = symbols[i]
225
+ market = self.markets[symbol]
226
+ if market['active']:
227
+ output.append(symbol)
228
+ return output
229
+
230
+ async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
231
+ """
232
+ watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
233
+
234
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
235
+
236
+ :param str[] [symbols]: unified symbol of the market to fetch the ticker for
237
+ :param dict [params]: extra parameters specific to the exchange API endpoint
238
+ :param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'INSTLEVEL1UMENTS'
239
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
240
+ """
241
+ await self.load_markets()
242
+ channel = None
243
+ channel, params = self.handle_option_and_params(params, 'watchTickers', 'channel', 'LEVEL1')
244
+ ticker = await self.subscribe(channel, symbols, params)
245
+ if self.newUpdates:
246
+ result: dict = {}
247
+ result[ticker['symbol']] = ticker
248
+ return result
249
+ return self.filter_by_array(self.tickers, 'symbol', symbols)
250
+
183
251
  def handle_instrument(self, client: Client, message):
184
252
  #
185
253
  # {
@@ -237,6 +305,33 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
237
305
  # "channel":"INSTRUMENTS",
238
306
  # "type":"SNAPSHOT"
239
307
  # }
308
+ # instruments
309
+ # {
310
+ # sequence: 0,
311
+ # instrument_type: 'PERP',
312
+ # instrument_mode: 'standard',
313
+ # base_asset_name: 'BTC',
314
+ # quote_asset_name: 'USDC',
315
+ # base_increment: '0.0001',
316
+ # quote_increment: '0.1',
317
+ # avg_daily_quantity: '502.8845',
318
+ # avg_daily_volume: '3.1495242961566668E7',
319
+ # total30_day_quantity: '15086.535',
320
+ # total30_day_volume: '9.44857288847E8',
321
+ # total24_hour_quantity: '5.0',
322
+ # total24_hour_volume: '337016.5',
323
+ # base_imf: '0.1',
324
+ # min_quantity: '0.0001',
325
+ # position_size_limit: '800',
326
+ # funding_interval: '3600000000000',
327
+ # trading_state: 'trading',
328
+ # last_updated_time: '2024-07-30T15:00:00Z',
329
+ # default_initial_margin: '0.2',
330
+ # base_asset_multiplier: '1.0',
331
+ # channel: 'INSTRUMENTS',
332
+ # type: 'SNAPSHOT',
333
+ # time: '2024-07-30T15:26:56.766Z',
334
+ # }
240
335
  #
241
336
  marketId = self.safe_string(ticker, 'product_id')
242
337
  datetime = self.safe_string(ticker, 'time')
@@ -259,8 +354,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
259
354
  'change': None,
260
355
  'percentage': None,
261
356
  'average': None,
262
- 'baseVolume': self.safe_string(ticker, 'total_24_hour_quantity'),
263
- 'quoteVolume': self.safe_string(ticker, 'total_24_hour_volume'),
357
+ 'baseVolume': self.safe_string_2(ticker, 'total_24_hour_quantity', 'total24_hour_quantity'),
358
+ 'quoteVolume': self.safe_string_2(ticker, 'total_24_hour_volume', 'total24_hour_volume'),
264
359
  })
265
360
 
266
361
  def handle_ticker(self, client: Client, message):
@@ -332,10 +427,71 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
332
427
  'previousClose': None,
333
428
  })
334
429
 
430
+ async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
431
+ """
432
+ watches historical candlestick data containing the open, high, low, close price, and the volume of a market
433
+
434
+ https://docs.cdp.coinbase.com/intx/docs/websocket-channels#candles-channel
435
+
436
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
437
+ :param str timeframe: the length of time each candle represents
438
+ :param int [since]: timestamp in ms of the earliest candle to fetch
439
+ :param int [limit]: the maximum amount of candles to fetch
440
+ :param dict [params]: extra parameters specific to the exchange API endpoint
441
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
442
+ """
443
+ await self.load_markets()
444
+ market = self.market(symbol)
445
+ symbol = market['symbol']
446
+ options = self.safe_dict(self.options, 'timeframes', {})
447
+ interval = self.safe_string(options, timeframe, timeframe)
448
+ ohlcv = await self.subscribe(interval, [symbol], params)
449
+ if self.newUpdates:
450
+ limit = ohlcv.getLimit(symbol, limit)
451
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
452
+
453
+ def handle_ohlcv(self, client: Client, message):
454
+ #
455
+ # {
456
+ # "sequence": 0,
457
+ # "product_id": "BTC-PERP",
458
+ # "channel": "CANDLES_ONE_MINUTE",
459
+ # "type": "SNAPSHOT",
460
+ # "candles": [
461
+ # {
462
+ # "time": "2023-05-10T14:58:47.000Z",
463
+ # "low": "28787.8",
464
+ # "high": "28788.8",
465
+ # "open": "28788.8",
466
+ # "close": "28787.8",
467
+ # "volume": "0.466"
468
+ # },
469
+ # ]
470
+ # }
471
+ #
472
+ messageHash = self.safe_string(message, 'channel')
473
+ marketId = self.safe_string(message, 'product_id')
474
+ market = self.safe_market(marketId)
475
+ symbol = market['symbol']
476
+ timeframe = self.find_timeframe(messageHash)
477
+ self.ohlcvs[symbol] = self.safe_value(self.ohlcvs, symbol, {})
478
+ if self.safe_value(self.ohlcvs[symbol], timeframe) is None:
479
+ limit = self.safe_integer(self.options, 'OHLCVLimit', 1000)
480
+ self.ohlcvs[symbol][timeframe] = ArrayCacheByTimestamp(limit)
481
+ stored = self.ohlcvs[symbol][timeframe]
482
+ data = self.safe_list(message, 'candles', [])
483
+ for i in range(0, len(data)):
484
+ tick = data[i]
485
+ parsed = self.parse_ohlcv(tick, market)
486
+ stored.append(parsed)
487
+ client.resolve(stored, messageHash + '::' + symbol)
488
+
335
489
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
336
490
  """
337
491
  get the list of most recent trades for a particular symbol
338
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
492
+
493
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
494
+
339
495
  :param str symbol: unified symbol of the market to fetch trades for
340
496
  :param int [since]: timestamp in ms of the earliest trade to fetch
341
497
  :param int [limit]: the maximum amount of trades to fetch
@@ -424,7 +580,9 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
424
580
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
425
581
  """
426
582
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
427
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
583
+
584
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
585
+
428
586
  :param str symbol: unified symbol of the market to fetch the order book for
429
587
  :param int [limit]: the maximum amount of order book entries to return
430
588
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -435,8 +593,10 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
435
593
  async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
436
594
  """
437
595
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
438
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
439
- :param str symbol: unified symbol of the market to fetch the order book for
596
+
597
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
598
+
599
+ :param str[] symbols:
440
600
  :param int [limit]: the maximum amount of order book entries to return
441
601
  :param dict [params]: extra parameters specific to the exchange API endpoint
442
602
  :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
@@ -566,6 +726,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
566
726
  #
567
727
  channel = self.safe_string(message, 'channel')
568
728
  fundingRate = self.parse_funding_rate(message)
729
+ self.fundingRates[fundingRate['symbol']] = fundingRate
569
730
  client.resolve(fundingRate, channel + '::' + fundingRate['symbol'])
570
731
 
571
732
  def handle_error_message(self, client: Client, message):
@@ -594,8 +755,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
594
755
  def handle_message(self, client, message):
595
756
  if self.handle_error_message(client, message):
596
757
  return
597
- channel = self.safe_string(message, 'channel')
598
- methods = {
758
+ channel = self.safe_string(message, 'channel', '')
759
+ methods: dict = {
599
760
  'SUBSCRIPTIONS': self.handle_subscription_status,
600
761
  'INSTRUMENTS': self.handle_instrument,
601
762
  'LEVEL1': self.handle_ticker,
@@ -608,6 +769,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
608
769
  if type == 'error':
609
770
  errorMessage = self.safe_string(message, 'message')
610
771
  raise ExchangeError(errorMessage)
772
+ if channel.find('CANDLES') > -1:
773
+ self.handle_ohlcv(client, message)
611
774
  method = self.safe_value(methods, channel)
612
775
  if method is not None:
613
776
  method(client, message)