ccxt-ir 4.3.46.0.1__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 (772) hide show
  1. ccxt/__init__.py +358 -0
  2. ccxt/abantether.py +316 -0
  3. ccxt/abstract/__init__.py +0 -0
  4. ccxt/abstract/abantether.py +5 -0
  5. ccxt/abstract/ace.py +15 -0
  6. ccxt/abstract/afratether.py +6 -0
  7. ccxt/abstract/alpaca.py +70 -0
  8. ccxt/abstract/arzinja.py +5 -0
  9. ccxt/abstract/arzplus.py +7 -0
  10. ccxt/abstract/ascendex.py +77 -0
  11. ccxt/abstract/bequant.py +115 -0
  12. ccxt/abstract/bigone.py +45 -0
  13. ccxt/abstract/binance.py +712 -0
  14. ccxt/abstract/binancecoinm.py +712 -0
  15. ccxt/abstract/binanceus.py +764 -0
  16. ccxt/abstract/binanceusdm.py +712 -0
  17. ccxt/abstract/bingx.py +113 -0
  18. ccxt/abstract/bit2c.py +27 -0
  19. ccxt/abstract/bitbank.py +27 -0
  20. ccxt/abstract/bitbay.py +53 -0
  21. ccxt/abstract/bitbns.py +40 -0
  22. ccxt/abstract/bitcoincom.py +115 -0
  23. ccxt/abstract/bitfinex.py +69 -0
  24. ccxt/abstract/bitfinex2.py +139 -0
  25. ccxt/abstract/bitflyer.py +38 -0
  26. ccxt/abstract/bitget.py +508 -0
  27. ccxt/abstract/bithumb.py +32 -0
  28. ccxt/abstract/bitimen.py +7 -0
  29. ccxt/abstract/bitir.py +7 -0
  30. ccxt/abstract/bitmart.py +99 -0
  31. ccxt/abstract/bitmex.py +97 -0
  32. ccxt/abstract/bitopro.py +29 -0
  33. ccxt/abstract/bitpanda.py +35 -0
  34. ccxt/abstract/bitpin.py +7 -0
  35. ccxt/abstract/bitrue.py +72 -0
  36. ccxt/abstract/bitso.py +43 -0
  37. ccxt/abstract/bitstamp.py +258 -0
  38. ccxt/abstract/bitteam.py +29 -0
  39. ccxt/abstract/bitvavo.py +27 -0
  40. ccxt/abstract/bl3p.py +19 -0
  41. ccxt/abstract/blockchaincom.py +28 -0
  42. ccxt/abstract/blofin.py +37 -0
  43. ccxt/abstract/btcalpha.py +18 -0
  44. ccxt/abstract/btcbox.py +13 -0
  45. ccxt/abstract/btcmarkets.py +39 -0
  46. ccxt/abstract/btcturk.py +20 -0
  47. ccxt/abstract/bybit.py +298 -0
  48. ccxt/abstract/cex.py +33 -0
  49. ccxt/abstract/coinbase.py +94 -0
  50. ccxt/abstract/coinbaseadvanced.py +94 -0
  51. ccxt/abstract/coinbaseexchange.py +67 -0
  52. ccxt/abstract/coinbaseinternational.py +39 -0
  53. ccxt/abstract/coincatch.py +94 -0
  54. ccxt/abstract/coincheck.py +33 -0
  55. ccxt/abstract/coinex.py +237 -0
  56. ccxt/abstract/coinlist.py +54 -0
  57. ccxt/abstract/coinmate.py +62 -0
  58. ccxt/abstract/coinmetro.py +34 -0
  59. ccxt/abstract/coinone.py +67 -0
  60. ccxt/abstract/coinsph.py +54 -0
  61. ccxt/abstract/coinspot.py +28 -0
  62. ccxt/abstract/cryptocom.py +107 -0
  63. ccxt/abstract/currencycom.py +68 -0
  64. ccxt/abstract/delta.py +50 -0
  65. ccxt/abstract/deribit.py +125 -0
  66. ccxt/abstract/digifinex.py +91 -0
  67. ccxt/abstract/eterex.py +5 -0
  68. ccxt/abstract/excoino.py +7 -0
  69. ccxt/abstract/exir.py +8 -0
  70. ccxt/abstract/exmo.py +55 -0
  71. ccxt/abstract/exnovin.py +6 -0
  72. ccxt/abstract/farhadexchange.py +5 -0
  73. ccxt/abstract/fmfwio.py +115 -0
  74. ccxt/abstract/gate.py +265 -0
  75. ccxt/abstract/gateio.py +265 -0
  76. ccxt/abstract/gemini.py +58 -0
  77. ccxt/abstract/hashkey.py +67 -0
  78. ccxt/abstract/hitbtc.py +115 -0
  79. ccxt/abstract/hitbtc3.py +115 -0
  80. ccxt/abstract/hitobit.py +8 -0
  81. ccxt/abstract/hollaex.py +33 -0
  82. ccxt/abstract/htx.py +548 -0
  83. ccxt/abstract/huobi.py +548 -0
  84. ccxt/abstract/huobijp.py +114 -0
  85. ccxt/abstract/hyperliquid.py +6 -0
  86. ccxt/abstract/idex.py +26 -0
  87. ccxt/abstract/independentreserve.py +37 -0
  88. ccxt/abstract/indodax.py +26 -0
  89. ccxt/abstract/jibitex.py +7 -0
  90. ccxt/abstract/kraken.py +57 -0
  91. ccxt/abstract/krakenfutures.py +38 -0
  92. ccxt/abstract/kucoin.py +214 -0
  93. ccxt/abstract/kucoinfutures.py +233 -0
  94. ccxt/abstract/kuna.py +182 -0
  95. ccxt/abstract/latoken.py +56 -0
  96. ccxt/abstract/lbank.py +61 -0
  97. ccxt/abstract/luno.py +37 -0
  98. ccxt/abstract/lykke.py +29 -0
  99. ccxt/abstract/mercado.py +25 -0
  100. ccxt/abstract/mexc.py +178 -0
  101. ccxt/abstract/ndax.py +97 -0
  102. ccxt/abstract/nobitex.py +7 -0
  103. ccxt/abstract/novadax.py +29 -0
  104. ccxt/abstract/oceanex.py +22 -0
  105. ccxt/abstract/okcoin.py +74 -0
  106. ccxt/abstract/okexchange.py +8 -0
  107. ccxt/abstract/okx.py +324 -0
  108. ccxt/abstract/ompfinex.py +7 -0
  109. ccxt/abstract/onetrading.py +35 -0
  110. ccxt/abstract/oxfun.py +34 -0
  111. ccxt/abstract/p2b.py +22 -0
  112. ccxt/abstract/paradex.py +40 -0
  113. ccxt/abstract/paymium.py +28 -0
  114. ccxt/abstract/phemex.py +115 -0
  115. ccxt/abstract/poloniex.py +69 -0
  116. ccxt/abstract/poloniexfutures.py +48 -0
  117. ccxt/abstract/probit.py +23 -0
  118. ccxt/abstract/ramzinex.py +7 -0
  119. ccxt/abstract/sarmayex.py +5 -0
  120. ccxt/abstract/sarrafex.py +7 -0
  121. ccxt/abstract/tabdeal.py +7 -0
  122. ccxt/abstract/tetherland.py +5 -0
  123. ccxt/abstract/timex.py +62 -0
  124. ccxt/abstract/tokocrypto.py +37 -0
  125. ccxt/abstract/tradeogre.py +16 -0
  126. ccxt/abstract/twox.py +5 -0
  127. ccxt/abstract/ubitex.py +7 -0
  128. ccxt/abstract/upbit.py +38 -0
  129. ccxt/abstract/vertex.py +19 -0
  130. ccxt/abstract/wallex.py +8 -0
  131. ccxt/abstract/wavesexchange.py +154 -0
  132. ccxt/abstract/wazirx.py +30 -0
  133. ccxt/abstract/whitebit.py +98 -0
  134. ccxt/abstract/woo.py +83 -0
  135. ccxt/abstract/woofipro.py +119 -0
  136. ccxt/abstract/xt.py +152 -0
  137. ccxt/abstract/yobit.py +16 -0
  138. ccxt/abstract/zaif.py +38 -0
  139. ccxt/abstract/zonda.py +53 -0
  140. ccxt/ace.py +1012 -0
  141. ccxt/afratether.py +293 -0
  142. ccxt/alpaca.py +1083 -0
  143. ccxt/arzinja.py +285 -0
  144. ccxt/arzplus.py +412 -0
  145. ccxt/ascendex.py +3330 -0
  146. ccxt/async_support/__init__.py +337 -0
  147. ccxt/async_support/abantether.py +316 -0
  148. ccxt/async_support/ace.py +1012 -0
  149. ccxt/async_support/afratether.py +293 -0
  150. ccxt/async_support/alpaca.py +1083 -0
  151. ccxt/async_support/arzinja.py +285 -0
  152. ccxt/async_support/arzplus.py +412 -0
  153. ccxt/async_support/ascendex.py +3330 -0
  154. ccxt/async_support/base/__init__.py +1 -0
  155. ccxt/async_support/base/exchange.py +1966 -0
  156. ccxt/async_support/base/throttler.py +50 -0
  157. ccxt/async_support/base/ws/__init__.py +38 -0
  158. ccxt/async_support/base/ws/aiohttp_client.py +125 -0
  159. ccxt/async_support/base/ws/cache.py +212 -0
  160. ccxt/async_support/base/ws/client.py +193 -0
  161. ccxt/async_support/base/ws/fast_client.py +96 -0
  162. ccxt/async_support/base/ws/functions.py +59 -0
  163. ccxt/async_support/base/ws/future.py +58 -0
  164. ccxt/async_support/base/ws/order_book.py +78 -0
  165. ccxt/async_support/base/ws/order_book_side.py +174 -0
  166. ccxt/async_support/bequant.py +33 -0
  167. ccxt/async_support/bigone.py +2113 -0
  168. ccxt/async_support/binance.py +12234 -0
  169. ccxt/async_support/binancecoinm.py +45 -0
  170. ccxt/async_support/binanceus.py +211 -0
  171. ccxt/async_support/binanceusdm.py +58 -0
  172. ccxt/async_support/bingx.py +4325 -0
  173. ccxt/async_support/bit2c.py +866 -0
  174. ccxt/async_support/bitbank.py +1001 -0
  175. ccxt/async_support/bitbay.py +17 -0
  176. ccxt/async_support/bitbns.py +1154 -0
  177. ccxt/async_support/bitcoincom.py +17 -0
  178. ccxt/async_support/bitfinex.py +1617 -0
  179. ccxt/async_support/bitfinex2.py +3552 -0
  180. ccxt/async_support/bitflyer.py +995 -0
  181. ccxt/async_support/bitget.py +8273 -0
  182. ccxt/async_support/bithumb.py +1061 -0
  183. ccxt/async_support/bitimen.py +401 -0
  184. ccxt/async_support/bitir.py +490 -0
  185. ccxt/async_support/bitmart.py +4415 -0
  186. ccxt/async_support/bitmex.py +2756 -0
  187. ccxt/async_support/bitopro.py +1630 -0
  188. ccxt/async_support/bitpanda.py +16 -0
  189. ccxt/async_support/bitpin.py +454 -0
  190. ccxt/async_support/bitrue.py +3027 -0
  191. ccxt/async_support/bitso.py +1670 -0
  192. ccxt/async_support/bitstamp.py +2203 -0
  193. ccxt/async_support/bitteam.py +2239 -0
  194. ccxt/async_support/bitvavo.py +1968 -0
  195. ccxt/async_support/bl3p.py +485 -0
  196. ccxt/async_support/blockchaincom.py +1104 -0
  197. ccxt/async_support/blofin.py +2066 -0
  198. ccxt/async_support/btcalpha.py +891 -0
  199. ccxt/async_support/btcbox.py +544 -0
  200. ccxt/async_support/btcmarkets.py +1221 -0
  201. ccxt/async_support/btcturk.py +911 -0
  202. ccxt/async_support/bybit.py +8159 -0
  203. ccxt/async_support/cex.py +1605 -0
  204. ccxt/async_support/coinbase.py +4475 -0
  205. ccxt/async_support/coinbaseadvanced.py +17 -0
  206. ccxt/async_support/coinbaseexchange.py +1734 -0
  207. ccxt/async_support/coinbaseinternational.py +1899 -0
  208. ccxt/async_support/coincatch.py +5069 -0
  209. ccxt/async_support/coincheck.py +815 -0
  210. ccxt/async_support/coinex.py +5526 -0
  211. ccxt/async_support/coinlist.py +2243 -0
  212. ccxt/async_support/coinmate.py +1067 -0
  213. ccxt/async_support/coinmetro.py +1797 -0
  214. ccxt/async_support/coinone.py +1127 -0
  215. ccxt/async_support/coinsph.py +1850 -0
  216. ccxt/async_support/coinspot.py +534 -0
  217. ccxt/async_support/cryptocom.py +2822 -0
  218. ccxt/async_support/currencycom.py +1950 -0
  219. ccxt/async_support/delta.py +3376 -0
  220. ccxt/async_support/deribit.py +3437 -0
  221. ccxt/async_support/digifinex.py +3960 -0
  222. ccxt/async_support/eterex.py +286 -0
  223. ccxt/async_support/excoino.py +399 -0
  224. ccxt/async_support/exir.py +375 -0
  225. ccxt/async_support/exmo.py +2462 -0
  226. ccxt/async_support/exnovin.py +360 -0
  227. ccxt/async_support/farhadexchange.py +266 -0
  228. ccxt/async_support/fmfwio.py +34 -0
  229. ccxt/async_support/gate.py +6976 -0
  230. ccxt/async_support/gateio.py +16 -0
  231. ccxt/async_support/gemini.py +1825 -0
  232. ccxt/async_support/hashkey.py +4150 -0
  233. ccxt/async_support/hitbtc.py +3423 -0
  234. ccxt/async_support/hitbtc3.py +16 -0
  235. ccxt/async_support/hitobit.py +391 -0
  236. ccxt/async_support/hollaex.py +1813 -0
  237. ccxt/async_support/htx.py +8506 -0
  238. ccxt/async_support/huobi.py +16 -0
  239. ccxt/async_support/huobijp.py +1801 -0
  240. ccxt/async_support/hyperliquid.py +2431 -0
  241. ccxt/async_support/idex.py +1766 -0
  242. ccxt/async_support/independentreserve.py +784 -0
  243. ccxt/async_support/indodax.py +1247 -0
  244. ccxt/async_support/jibitex.py +395 -0
  245. ccxt/async_support/kraken.py +2894 -0
  246. ccxt/async_support/krakenfutures.py +2601 -0
  247. ccxt/async_support/kucoin.py +4602 -0
  248. ccxt/async_support/kucoinfutures.py +2698 -0
  249. ccxt/async_support/kuna.py +1841 -0
  250. ccxt/async_support/latoken.py +1664 -0
  251. ccxt/async_support/lbank.py +2683 -0
  252. ccxt/async_support/luno.py +1067 -0
  253. ccxt/async_support/lykke.py +1270 -0
  254. ccxt/async_support/mercado.py +842 -0
  255. ccxt/async_support/mexc.py +5369 -0
  256. ccxt/async_support/ndax.py +2354 -0
  257. ccxt/async_support/nobitex.py +419 -0
  258. ccxt/async_support/novadax.py +1484 -0
  259. ccxt/async_support/oceanex.py +903 -0
  260. ccxt/async_support/okcoin.py +2936 -0
  261. ccxt/async_support/okexchange.py +349 -0
  262. ccxt/async_support/okx.py +7827 -0
  263. ccxt/async_support/ompfinex.py +472 -0
  264. ccxt/async_support/onetrading.py +1911 -0
  265. ccxt/async_support/oxfun.py +2773 -0
  266. ccxt/async_support/p2b.py +1194 -0
  267. ccxt/async_support/paradex.py +2015 -0
  268. ccxt/async_support/paymium.py +564 -0
  269. ccxt/async_support/phemex.py +4473 -0
  270. ccxt/async_support/poloniex.py +2232 -0
  271. ccxt/async_support/poloniexfutures.py +1717 -0
  272. ccxt/async_support/probit.py +1734 -0
  273. ccxt/async_support/ramzinex.py +476 -0
  274. ccxt/async_support/sarmayex.py +357 -0
  275. ccxt/async_support/sarrafex.py +478 -0
  276. ccxt/async_support/tabdeal.py +364 -0
  277. ccxt/async_support/tetherland.py +349 -0
  278. ccxt/async_support/timex.py +1593 -0
  279. ccxt/async_support/tokocrypto.py +2405 -0
  280. ccxt/async_support/tradeogre.py +608 -0
  281. ccxt/async_support/twox.py +326 -0
  282. ccxt/async_support/ubitex.py +409 -0
  283. ccxt/async_support/upbit.py +1833 -0
  284. ccxt/async_support/vertex.py +2922 -0
  285. ccxt/async_support/wallex.py +445 -0
  286. ccxt/async_support/wavesexchange.py +2473 -0
  287. ccxt/async_support/wazirx.py +1224 -0
  288. ccxt/async_support/whitebit.py +2469 -0
  289. ccxt/async_support/woo.py +3114 -0
  290. ccxt/async_support/woofipro.py +2533 -0
  291. ccxt/async_support/xt.py +4454 -0
  292. ccxt/async_support/yobit.py +1283 -0
  293. ccxt/async_support/zaif.py +725 -0
  294. ccxt/async_support/zonda.py +1828 -0
  295. ccxt/base/__init__.py +27 -0
  296. ccxt/base/decimal_to_precision.py +174 -0
  297. ccxt/base/errors.py +242 -0
  298. ccxt/base/exchange.py +5941 -0
  299. ccxt/base/precise.py +287 -0
  300. ccxt/base/types.py +502 -0
  301. ccxt/bequant.py +33 -0
  302. ccxt/bigone.py +2112 -0
  303. ccxt/binance.py +12233 -0
  304. ccxt/binancecoinm.py +45 -0
  305. ccxt/binanceus.py +211 -0
  306. ccxt/binanceusdm.py +58 -0
  307. ccxt/bingx.py +4324 -0
  308. ccxt/bit2c.py +866 -0
  309. ccxt/bitbank.py +1001 -0
  310. ccxt/bitbay.py +17 -0
  311. ccxt/bitbns.py +1154 -0
  312. ccxt/bitcoincom.py +17 -0
  313. ccxt/bitfinex.py +1617 -0
  314. ccxt/bitfinex2.py +3552 -0
  315. ccxt/bitflyer.py +995 -0
  316. ccxt/bitget.py +8272 -0
  317. ccxt/bithumb.py +1061 -0
  318. ccxt/bitimen.py +401 -0
  319. ccxt/bitir.py +490 -0
  320. ccxt/bitmart.py +4415 -0
  321. ccxt/bitmex.py +2756 -0
  322. ccxt/bitopro.py +1630 -0
  323. ccxt/bitpanda.py +16 -0
  324. ccxt/bitpin.py +454 -0
  325. ccxt/bitrue.py +3026 -0
  326. ccxt/bitso.py +1670 -0
  327. ccxt/bitstamp.py +2203 -0
  328. ccxt/bitteam.py +2239 -0
  329. ccxt/bitvavo.py +1968 -0
  330. ccxt/bl3p.py +485 -0
  331. ccxt/blockchaincom.py +1104 -0
  332. ccxt/blofin.py +2066 -0
  333. ccxt/btcalpha.py +891 -0
  334. ccxt/btcbox.py +544 -0
  335. ccxt/btcmarkets.py +1221 -0
  336. ccxt/btcturk.py +911 -0
  337. ccxt/bybit.py +8158 -0
  338. ccxt/cex.py +1605 -0
  339. ccxt/coinbase.py +4474 -0
  340. ccxt/coinbaseadvanced.py +17 -0
  341. ccxt/coinbaseexchange.py +1734 -0
  342. ccxt/coinbaseinternational.py +1899 -0
  343. ccxt/coincatch.py +5069 -0
  344. ccxt/coincheck.py +815 -0
  345. ccxt/coinex.py +5525 -0
  346. ccxt/coinlist.py +2243 -0
  347. ccxt/coinmate.py +1067 -0
  348. ccxt/coinmetro.py +1797 -0
  349. ccxt/coinone.py +1127 -0
  350. ccxt/coinsph.py +1850 -0
  351. ccxt/coinspot.py +534 -0
  352. ccxt/cryptocom.py +2822 -0
  353. ccxt/currencycom.py +1950 -0
  354. ccxt/delta.py +3376 -0
  355. ccxt/deribit.py +3437 -0
  356. ccxt/digifinex.py +3959 -0
  357. ccxt/eterex.py +286 -0
  358. ccxt/excoino.py +399 -0
  359. ccxt/exir.py +375 -0
  360. ccxt/exmo.py +2462 -0
  361. ccxt/exnovin.py +360 -0
  362. ccxt/farhadexchange.py +266 -0
  363. ccxt/fmfwio.py +34 -0
  364. ccxt/gate.py +6975 -0
  365. ccxt/gateio.py +16 -0
  366. ccxt/gemini.py +1824 -0
  367. ccxt/hashkey.py +4150 -0
  368. ccxt/hitbtc.py +3423 -0
  369. ccxt/hitbtc3.py +16 -0
  370. ccxt/hitobit.py +391 -0
  371. ccxt/hollaex.py +1813 -0
  372. ccxt/htx.py +8505 -0
  373. ccxt/huobi.py +16 -0
  374. ccxt/huobijp.py +1801 -0
  375. ccxt/hyperliquid.py +2430 -0
  376. ccxt/idex.py +1766 -0
  377. ccxt/independentreserve.py +784 -0
  378. ccxt/indodax.py +1247 -0
  379. ccxt/jibitex.py +395 -0
  380. ccxt/kraken.py +2894 -0
  381. ccxt/krakenfutures.py +2601 -0
  382. ccxt/kucoin.py +4601 -0
  383. ccxt/kucoinfutures.py +2698 -0
  384. ccxt/kuna.py +1841 -0
  385. ccxt/latoken.py +1664 -0
  386. ccxt/lbank.py +2682 -0
  387. ccxt/luno.py +1067 -0
  388. ccxt/lykke.py +1270 -0
  389. ccxt/mercado.py +842 -0
  390. ccxt/mexc.py +5369 -0
  391. ccxt/ndax.py +2354 -0
  392. ccxt/nobitex.py +419 -0
  393. ccxt/novadax.py +1484 -0
  394. ccxt/oceanex.py +903 -0
  395. ccxt/okcoin.py +2936 -0
  396. ccxt/okexchange.py +349 -0
  397. ccxt/okx.py +7826 -0
  398. ccxt/ompfinex.py +472 -0
  399. ccxt/onetrading.py +1911 -0
  400. ccxt/oxfun.py +2772 -0
  401. ccxt/p2b.py +1194 -0
  402. ccxt/paradex.py +2015 -0
  403. ccxt/paymium.py +564 -0
  404. ccxt/phemex.py +4473 -0
  405. ccxt/poloniex.py +2232 -0
  406. ccxt/poloniexfutures.py +1717 -0
  407. ccxt/pro/__init__.py +149 -0
  408. ccxt/pro/alpaca.py +685 -0
  409. ccxt/pro/ascendex.py +916 -0
  410. ccxt/pro/bequant.py +38 -0
  411. ccxt/pro/binance.py +3488 -0
  412. ccxt/pro/binancecoinm.py +28 -0
  413. ccxt/pro/binanceus.py +48 -0
  414. ccxt/pro/binanceusdm.py +31 -0
  415. ccxt/pro/bingx.py +1264 -0
  416. ccxt/pro/bitcoincom.py +34 -0
  417. ccxt/pro/bitfinex.py +621 -0
  418. ccxt/pro/bitfinex2.py +1083 -0
  419. ccxt/pro/bitget.py +1692 -0
  420. ccxt/pro/bithumb.py +368 -0
  421. ccxt/pro/bitmart.py +1449 -0
  422. ccxt/pro/bitmex.py +1656 -0
  423. ccxt/pro/bitopro.py +445 -0
  424. ccxt/pro/bitpanda.py +15 -0
  425. ccxt/pro/bitrue.py +447 -0
  426. ccxt/pro/bitstamp.py +522 -0
  427. ccxt/pro/bitvavo.py +1270 -0
  428. ccxt/pro/blockchaincom.py +738 -0
  429. ccxt/pro/blofin.py +692 -0
  430. ccxt/pro/bybit.py +2000 -0
  431. ccxt/pro/cex.py +1440 -0
  432. ccxt/pro/coinbase.py +678 -0
  433. ccxt/pro/coinbaseadvanced.py +16 -0
  434. ccxt/pro/coinbaseexchange.py +895 -0
  435. ccxt/pro/coinbaseinternational.py +620 -0
  436. ccxt/pro/coincatch.py +1464 -0
  437. ccxt/pro/coincheck.py +199 -0
  438. ccxt/pro/coinex.py +1061 -0
  439. ccxt/pro/coinone.py +395 -0
  440. ccxt/pro/cryptocom.py +947 -0
  441. ccxt/pro/currencycom.py +536 -0
  442. ccxt/pro/deribit.py +892 -0
  443. ccxt/pro/exmo.py +629 -0
  444. ccxt/pro/gate.py +1416 -0
  445. ccxt/pro/gateio.py +15 -0
  446. ccxt/pro/gemini.py +865 -0
  447. ccxt/pro/hashkey.py +802 -0
  448. ccxt/pro/hitbtc.py +1216 -0
  449. ccxt/pro/hollaex.py +563 -0
  450. ccxt/pro/htx.py +2215 -0
  451. ccxt/pro/huobi.py +15 -0
  452. ccxt/pro/huobijp.py +570 -0
  453. ccxt/pro/hyperliquid.py +525 -0
  454. ccxt/pro/idex.py +672 -0
  455. ccxt/pro/independentreserve.py +270 -0
  456. ccxt/pro/kraken.py +1356 -0
  457. ccxt/pro/krakenfutures.py +1492 -0
  458. ccxt/pro/kucoin.py +1133 -0
  459. ccxt/pro/kucoinfutures.py +1081 -0
  460. ccxt/pro/lbank.py +843 -0
  461. ccxt/pro/luno.py +303 -0
  462. ccxt/pro/mexc.py +1122 -0
  463. ccxt/pro/ndax.py +506 -0
  464. ccxt/pro/okcoin.py +698 -0
  465. ccxt/pro/okx.py +1851 -0
  466. ccxt/pro/onetrading.py +1275 -0
  467. ccxt/pro/oxfun.py +950 -0
  468. ccxt/pro/p2b.py +419 -0
  469. ccxt/pro/paradex.py +352 -0
  470. ccxt/pro/phemex.py +1441 -0
  471. ccxt/pro/poloniex.py +1166 -0
  472. ccxt/pro/poloniexfutures.py +990 -0
  473. ccxt/pro/probit.py +551 -0
  474. ccxt/pro/upbit.py +520 -0
  475. ccxt/pro/vertex.py +943 -0
  476. ccxt/pro/wazirx.py +749 -0
  477. ccxt/pro/whitebit.py +864 -0
  478. ccxt/pro/woo.py +1078 -0
  479. ccxt/pro/woofipro.py +1183 -0
  480. ccxt/pro/xt.py +1067 -0
  481. ccxt/probit.py +1734 -0
  482. ccxt/ramzinex.py +476 -0
  483. ccxt/sarmayex.py +357 -0
  484. ccxt/sarrafex.py +478 -0
  485. ccxt/static_dependencies/__init__.py +1 -0
  486. ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  487. ccxt/static_dependencies/ecdsa/_version.py +520 -0
  488. ccxt/static_dependencies/ecdsa/curves.py +56 -0
  489. ccxt/static_dependencies/ecdsa/der.py +221 -0
  490. ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  491. ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  492. ccxt/static_dependencies/ecdsa/keys.py +332 -0
  493. ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  494. ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  495. ccxt/static_dependencies/ecdsa/util.py +266 -0
  496. ccxt/static_dependencies/ethereum/__init__.py +7 -0
  497. ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  498. ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  499. ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  500. ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  501. ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  502. ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  503. ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  504. ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  505. ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  506. ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  507. ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  508. ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  509. ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  510. ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  511. ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  512. ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  513. ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  514. ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  515. ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  516. ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  517. ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  518. ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  519. ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  520. ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  521. ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  522. ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  523. ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  524. ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  525. ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  526. ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  527. ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  528. ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  529. ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  530. ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  531. ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  532. ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  533. ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  534. ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  535. ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  536. ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  537. ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  538. ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  539. ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  540. ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  541. ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  542. ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  543. ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  544. ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  545. ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  546. ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  547. ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  548. ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  549. ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  550. ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  551. ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  552. ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  553. ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  554. ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  555. ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  556. ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  557. ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  558. ccxt/static_dependencies/keccak/__init__.py +3 -0
  559. ccxt/static_dependencies/keccak/keccak.py +197 -0
  560. ccxt/static_dependencies/lark/__init__.py +38 -0
  561. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  562. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  563. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  564. ccxt/static_dependencies/lark/common.py +86 -0
  565. ccxt/static_dependencies/lark/exceptions.py +292 -0
  566. ccxt/static_dependencies/lark/grammar.py +130 -0
  567. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  568. ccxt/static_dependencies/lark/indenter.py +143 -0
  569. ccxt/static_dependencies/lark/lark.py +658 -0
  570. ccxt/static_dependencies/lark/lexer.py +678 -0
  571. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  572. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  573. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  574. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  575. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  576. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  577. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  578. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  579. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  580. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  581. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  582. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  583. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  584. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  585. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  586. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  587. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  588. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  589. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  590. ccxt/static_dependencies/lark/tree.py +267 -0
  591. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  592. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  593. ccxt/static_dependencies/lark/utils.py +343 -0
  594. ccxt/static_dependencies/lark/visitors.py +596 -0
  595. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  596. ccxt/static_dependencies/marshmallow/base.py +65 -0
  597. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  598. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  599. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  600. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  601. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  602. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  603. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  604. ccxt/static_dependencies/marshmallow/types.py +12 -0
  605. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  606. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  607. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  608. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  609. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  610. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  611. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  612. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  613. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  614. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  615. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  616. ccxt/static_dependencies/msgpack/__init__.py +55 -0
  617. ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  618. ccxt/static_dependencies/msgpack/ext.py +168 -0
  619. ccxt/static_dependencies/msgpack/fallback.py +951 -0
  620. ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  621. ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  622. ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  623. ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  624. ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  625. ccxt/static_dependencies/parsimonious/utils.py +40 -0
  626. ccxt/static_dependencies/starknet/__init__.py +0 -0
  627. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  628. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  629. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  630. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  631. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  632. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  633. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  634. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  635. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  636. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  637. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  638. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  639. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  640. ccxt/static_dependencies/starknet/common.py +15 -0
  641. ccxt/static_dependencies/starknet/constants.py +39 -0
  642. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  643. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  644. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  645. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  646. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  647. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  648. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  649. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  650. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  651. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  652. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  653. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  654. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  655. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  656. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  657. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  658. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  659. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  660. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  661. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  662. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  663. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  664. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  665. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  666. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  667. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  668. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  669. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  670. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  671. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  672. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  673. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  674. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  675. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  676. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  677. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  678. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  679. ccxt/static_dependencies/starkware/__init__.py +0 -0
  680. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  681. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  682. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  683. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  684. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  685. ccxt/static_dependencies/sympy/__init__.py +0 -0
  686. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  687. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  688. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  689. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  690. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  691. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  692. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  693. ccxt/static_dependencies/toolz/__init__.py +26 -0
  694. ccxt/static_dependencies/toolz/_signatures.py +784 -0
  695. ccxt/static_dependencies/toolz/_version.py +520 -0
  696. ccxt/static_dependencies/toolz/compatibility.py +30 -0
  697. ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  698. ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  699. ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  700. ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  701. ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  702. ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  703. ccxt/static_dependencies/toolz/recipes.py +46 -0
  704. ccxt/static_dependencies/toolz/utils.py +9 -0
  705. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  706. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  707. ccxt/tabdeal.py +364 -0
  708. ccxt/test/__init__.py +3 -0
  709. ccxt/test/base/__init__.py +29 -0
  710. ccxt/test/base/test_account.py +26 -0
  711. ccxt/test/base/test_balance.py +56 -0
  712. ccxt/test/base/test_borrow_interest.py +35 -0
  713. ccxt/test/base/test_borrow_rate.py +32 -0
  714. ccxt/test/base/test_calculate_fee.py +51 -0
  715. ccxt/test/base/test_crypto.py +127 -0
  716. ccxt/test/base/test_currency.py +76 -0
  717. ccxt/test/base/test_datetime.py +109 -0
  718. ccxt/test/base/test_decimal_to_precision.py +392 -0
  719. ccxt/test/base/test_deep_extend.py +68 -0
  720. ccxt/test/base/test_deposit_withdrawal.py +50 -0
  721. ccxt/test/base/test_exchange_datetime_functions.py +76 -0
  722. ccxt/test/base/test_funding_rate_history.py +29 -0
  723. ccxt/test/base/test_last_price.py +31 -0
  724. ccxt/test/base/test_ledger_entry.py +45 -0
  725. ccxt/test/base/test_ledger_item.py +48 -0
  726. ccxt/test/base/test_leverage_tier.py +33 -0
  727. ccxt/test/base/test_liquidation.py +50 -0
  728. ccxt/test/base/test_margin_mode.py +24 -0
  729. ccxt/test/base/test_margin_modification.py +35 -0
  730. ccxt/test/base/test_market.py +193 -0
  731. ccxt/test/base/test_number.py +411 -0
  732. ccxt/test/base/test_ohlcv.py +33 -0
  733. ccxt/test/base/test_open_interest.py +32 -0
  734. ccxt/test/base/test_order.py +64 -0
  735. ccxt/test/base/test_order_book.py +69 -0
  736. ccxt/test/base/test_position.py +60 -0
  737. ccxt/test/base/test_shared_methods.py +353 -0
  738. ccxt/test/base/test_status.py +24 -0
  739. ccxt/test/base/test_throttle.py +126 -0
  740. ccxt/test/base/test_ticker.py +92 -0
  741. ccxt/test/base/test_trade.py +47 -0
  742. ccxt/test/base/test_trading_fee.py +26 -0
  743. ccxt/test/base/test_transaction.py +39 -0
  744. ccxt/test/test_async.py +1649 -0
  745. ccxt/test/test_sync.py +1648 -0
  746. ccxt/test/tests_async.py +1558 -0
  747. ccxt/test/tests_helpers.py +287 -0
  748. ccxt/test/tests_init.py +39 -0
  749. ccxt/test/tests_sync.py +1555 -0
  750. ccxt/tetherland.py +349 -0
  751. ccxt/timex.py +1593 -0
  752. ccxt/tokocrypto.py +2405 -0
  753. ccxt/tradeogre.py +608 -0
  754. ccxt/twox.py +326 -0
  755. ccxt/ubitex.py +409 -0
  756. ccxt/upbit.py +1833 -0
  757. ccxt/vertex.py +2922 -0
  758. ccxt/wallex.py +445 -0
  759. ccxt/wavesexchange.py +2472 -0
  760. ccxt/wazirx.py +1224 -0
  761. ccxt/whitebit.py +2469 -0
  762. ccxt/woo.py +3114 -0
  763. ccxt/woofipro.py +2533 -0
  764. ccxt/xt.py +4453 -0
  765. ccxt/yobit.py +1283 -0
  766. ccxt/zaif.py +725 -0
  767. ccxt/zonda.py +1828 -0
  768. ccxt_ir-4.3.46.0.1.dist-info/LICENSE.txt +21 -0
  769. ccxt_ir-4.3.46.0.1.dist-info/METADATA +655 -0
  770. ccxt_ir-4.3.46.0.1.dist-info/RECORD +772 -0
  771. ccxt_ir-4.3.46.0.1.dist-info/WHEEL +6 -0
  772. ccxt_ir-4.3.46.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1194 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+
6
+ from ccxt.async_support.base.exchange import Exchange
7
+ from ccxt.abstract.p2b import ImplicitAPI
8
+ import hashlib
9
+ from ccxt.base.types import Int, Market, Num, Order, OrderSide, OrderType, Str, Strings, Ticker, Tickers
10
+ from typing import List
11
+ from ccxt.base.errors import AuthenticationError
12
+ from ccxt.base.errors import ArgumentsRequired
13
+ from ccxt.base.errors import BadRequest
14
+ from ccxt.base.errors import InsufficientFunds
15
+ from ccxt.base.errors import ExchangeNotAvailable
16
+ from ccxt.base.decimal_to_precision import TICK_SIZE
17
+
18
+
19
+ class p2b(Exchange, ImplicitAPI):
20
+
21
+ def describe(self):
22
+ return self.deep_extend(super(p2b, self).describe(), {
23
+ 'id': 'p2b',
24
+ 'name': 'p2b',
25
+ 'countries': ['LT'],
26
+ 'rateLimit': 100,
27
+ 'version': 'v2',
28
+ 'pro': True,
29
+ 'has': {
30
+ 'CORS': None,
31
+ 'spot': True,
32
+ 'margin': False,
33
+ 'swap': False,
34
+ 'future': False,
35
+ 'option': False,
36
+ 'addMargin': False,
37
+ 'cancelAllOrders': False,
38
+ 'cancelOrder': True,
39
+ 'cancelOrders': False,
40
+ 'closeAllPositions': False,
41
+ 'closePosition': False,
42
+ 'createDepositAddress': False,
43
+ 'createMarketOrder': False,
44
+ 'createOrder': True,
45
+ 'createOrders': False,
46
+ 'createPostOnlyOrder': False,
47
+ 'createReduceOnlyOrder': False,
48
+ 'createStopLimitOrder': False,
49
+ 'createStopMarketOrder': False,
50
+ 'createStopOrder': False,
51
+ 'fetchAccounts': False,
52
+ 'fetchBalance': True,
53
+ 'fetchBorrowInterest': False,
54
+ 'fetchBorrowRateHistory': False,
55
+ 'fetchClosedOrders': True,
56
+ 'fetchCrossBorrowRate': False,
57
+ 'fetchCrossBorrowRates': False,
58
+ 'fetchDeposit': False,
59
+ 'fetchDepositAddress': False,
60
+ 'fetchDepositAddresses': False,
61
+ 'fetchDepositAddressesByNetwork': False,
62
+ 'fetchDeposits': False,
63
+ 'fetchDepositsWithdrawals': False,
64
+ 'fetchFundingHistory': False,
65
+ 'fetchFundingRate': False,
66
+ 'fetchFundingRateHistory': False,
67
+ 'fetchFundingRates': False,
68
+ 'fetchIndexOHLCV': False,
69
+ 'fetchIsolatedBorrowRate': False,
70
+ 'fetchIsolatedBorrowRates': False,
71
+ 'fetchLedger': False,
72
+ 'fetchLedgerEntry': False,
73
+ 'fetchLeverageTiers': False,
74
+ 'fetchMarketLeverageTiers': False,
75
+ 'fetchMarkets': True,
76
+ 'fetchMarkOHLCV': False,
77
+ 'fetchMyTrades': True,
78
+ 'fetchOHLCV': True,
79
+ 'fetchOpenInterest': False,
80
+ 'fetchOpenInterestHistory': False,
81
+ 'fetchOpenOrders': True,
82
+ 'fetchOrderBook': True,
83
+ 'fetchOrderBooks': False,
84
+ 'fetchOrders': True,
85
+ 'fetchOrderTrades': True,
86
+ 'fetchPermissions': False,
87
+ 'fetchPosition': False,
88
+ 'fetchPositionHistory': False,
89
+ 'fetchPositionMode': False,
90
+ 'fetchPositions': False,
91
+ 'fetchPositionsForSymbol': False,
92
+ 'fetchPositionsHistory': False,
93
+ 'fetchPositionsRisk': False,
94
+ 'fetchPremiumIndexOHLCV': False,
95
+ 'fetchTicker': True,
96
+ 'fetchTickers': True,
97
+ 'fetchTrades': True,
98
+ 'fetchTradingLimits': False,
99
+ 'fetchTransactionFee': False,
100
+ 'fetchTransactionFees': False,
101
+ 'fetchTransactions': False,
102
+ 'fetchTransfers': False,
103
+ 'fetchWithdrawAddresses': False,
104
+ 'fetchWithdrawal': False,
105
+ 'fetchWithdrawals': False,
106
+ 'reduceMargin': False,
107
+ 'setLeverage': False,
108
+ 'setMargin': False,
109
+ 'setMarginMode': False,
110
+ 'setPositionMode': False,
111
+ 'signIn': False,
112
+ 'transfer': False,
113
+ 'withdraw': False,
114
+ },
115
+ 'timeframes': {
116
+ '1m': '1m',
117
+ '1h': '1h',
118
+ '1d': '1d',
119
+ },
120
+ 'urls': {
121
+ 'extension': '.json',
122
+ 'referral': 'https://p2pb2b.com?referral=ee784c53',
123
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/8da13a80-1f0a-49be-bb90-ff8b25164755',
124
+ 'api': {
125
+ 'public': 'https://api.p2pb2b.com/api/v2/public',
126
+ 'private': 'https://api.p2pb2b.com/api/v2',
127
+ },
128
+ 'www': 'https://p2pb2b.com/',
129
+ 'doc': 'https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md',
130
+ 'fees': 'https://p2pb2b.com/fee-schedule/',
131
+ },
132
+ 'api': {
133
+ 'public': {
134
+ 'get': {
135
+ 'markets': 1,
136
+ 'market': 1,
137
+ 'tickers': 1,
138
+ 'ticker': 1,
139
+ 'book': 1,
140
+ 'history': 1,
141
+ 'depth/result': 1,
142
+ 'market/kline': 1,
143
+ },
144
+ },
145
+ 'private': {
146
+ 'post': {
147
+ 'account/balances': 1,
148
+ 'account/balance': 1,
149
+ 'order/new': 1,
150
+ 'order/cancel': 1,
151
+ 'orders': 1,
152
+ 'account/market_order_history': 1,
153
+ 'account/market_deal_history': 1,
154
+ 'account/order': 1,
155
+ 'account/order_history': 1,
156
+ 'account/executed_history': 1,
157
+ },
158
+ },
159
+ },
160
+ 'fees': {
161
+ 'trading': {
162
+ 'tierBased': True,
163
+ 'percentage': True,
164
+ 'taker': [
165
+ [self.parse_number('0'), self.parse_number('0.2')],
166
+ [self.parse_number('1'), self.parse_number('0.19')],
167
+ [self.parse_number('5'), self.parse_number('0.18')],
168
+ [self.parse_number('10'), self.parse_number('0.17')],
169
+ [self.parse_number('25'), self.parse_number('0.16')],
170
+ [self.parse_number('75'), self.parse_number('0.15')],
171
+ [self.parse_number('100'), self.parse_number('0.14')],
172
+ [self.parse_number('150'), self.parse_number('0.13')],
173
+ [self.parse_number('300'), self.parse_number('0.12')],
174
+ [self.parse_number('450'), self.parse_number('0.11')],
175
+ [self.parse_number('500'), self.parse_number('0.1')],
176
+ ],
177
+ 'maker': [
178
+ [self.parse_number('0'), self.parse_number('0.2')],
179
+ [self.parse_number('1'), self.parse_number('0.18')],
180
+ [self.parse_number('5'), self.parse_number('0.16')],
181
+ [self.parse_number('10'), self.parse_number('0.14')],
182
+ [self.parse_number('25'), self.parse_number('0.12')],
183
+ [self.parse_number('75'), self.parse_number('0.1')],
184
+ [self.parse_number('100'), self.parse_number('0.08')],
185
+ [self.parse_number('150'), self.parse_number('0.06')],
186
+ [self.parse_number('300'), self.parse_number('0.04')],
187
+ [self.parse_number('450'), self.parse_number('0.02')],
188
+ [self.parse_number('500'), self.parse_number('0.01')],
189
+ ],
190
+ },
191
+ },
192
+ 'commonCurrencies': {
193
+ },
194
+ 'precisionMode': TICK_SIZE,
195
+ 'exceptions': {
196
+ '1001': AuthenticationError, # Key not provided. X-TXC-APIKEY header is missing in the request or empty.
197
+ '1002': AuthenticationError, # Payload not provided. X-TXC-PAYLOAD header is missing in the request or empty.
198
+ '1003': AuthenticationError, # Signature not provided. X-TXC-SIGNATURE header is missing in the request or empty.
199
+ '1004': AuthenticationError, # Nonce and url not provided. Request body is empty. Missing required parameters "request", "nonce".
200
+ '1005': AuthenticationError, # Invalid body data. Invalid request body
201
+ '1006': AuthenticationError, # Nonce not provided. Request body missing required parameter "nonce".
202
+ '1007': AuthenticationError, # Request not provided. Request body missing required parameter "request".
203
+ '1008': AuthenticationError, # Invalid request in body. The passed request parameter does not match the URL of self request.
204
+ '1009': AuthenticationError, # Invalid payload. The transmitted payload value(X-TXC-PAYLOAD header) does not match the request body.
205
+ '1010': AuthenticationError, # This action is unauthorized. - API key passed in the X-TXC-APIKEY header does not exist. - Access to API is not activated. Go to profile and activate access.
206
+ '1011': AuthenticationError, # This action is unauthorized. Please, enable two-factor authentication. Two-factor authentication is not activated for the user.
207
+ '1012': AuthenticationError, # Invalid nonce. Parameter "nonce" is not a number.
208
+ '1013': AuthenticationError, # Too many requests. - A request came with a repeated value of nonce. - Received more than the limited value of requests(10) within one second.
209
+ '1014': AuthenticationError, # Unauthorized request. Signature value passed(in the X-TXC-SIGNATURE header) does not match the request body.
210
+ '1015': AuthenticationError, # Temporary block. Temporary blocking. There is a cancellation of orders.
211
+ '1016': AuthenticationError, # Not unique nonce. The request was sent with a repeated parameter "nonce" within 10 seconds.
212
+ '2010': BadRequest, # Currency not found. Currency not found.
213
+ '2020': BadRequest, # Market is not available. Market is not available.
214
+ '2021': BadRequest, # Unknown market. Unknown market.
215
+ '2030': BadRequest, # Order not found. Order not found.
216
+ '2040': InsufficientFunds, # Balance not enough. Insufficient balance.
217
+ '2050': BadRequest, # Amount less than the permitted minimum. Amount less than the permitted minimum.
218
+ '2051': BadRequest, # Amount is greater than the maximum allowed. Amount exceeds the allowed maximum.
219
+ '2052': BadRequest, # Amount step size error. Amount step size error.
220
+ '2060': BadRequest, # Price less than the permitted minimum. Price is less than the permitted minimum.
221
+ '2061': BadRequest, # Price is greater than the maximum allowed. Price exceeds the allowed maximum.
222
+ '2062': BadRequest, # Price pick size error. Price pick size error.
223
+ '2070': BadRequest, # Total less than the permitted minimum. Total less than the permitted minimum.
224
+ '3001': BadRequest, # Validation exception. The given data was invalid.
225
+ '3020': BadRequest, # Invalid currency value. Incorrect parameter, check your request.
226
+ '3030': BadRequest, # Invalid market value. Incorrect "market" parameter, check your request.
227
+ '3040': BadRequest, # Invalid amount value. Incorrect "amount" parameter, check your request.
228
+ '3050': BadRequest, # Invalid price value. Incorrect "price" parameter, check your request.
229
+ '3060': BadRequest, # Invalid limit value. Incorrect "limit" parameter, check your request.
230
+ '3070': BadRequest, # Invalid offset value. Incorrect "offset" parameter, check your request.
231
+ '3080': BadRequest, # Invalid orderId value. Incorrect "orderId" parameter, check your request.
232
+ '3090': BadRequest, # Invalid lastId value. Incorrect "lastId" parameter, check your request.
233
+ '3100': BadRequest, # Invalid side value. Incorrect "side" parameter, check your request.
234
+ '3110': BadRequest, # Invalid interval value. Incorrect "interval" parameter, check your request.
235
+ '4001': ExchangeNotAvailable, # Service temporary unavailable. An unexpected system error has occurred. Try again after a while. If the error persists, please contact support.
236
+ '6010': InsufficientFunds, # Balance not enough. Insufficient balance.
237
+ },
238
+ 'options': {
239
+ },
240
+ })
241
+
242
+ async def fetch_markets(self, params={}) -> List[Market]:
243
+ """
244
+ retrieves data on all markets for bigone
245
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#markets
246
+ :param dict [params]: extra parameters specific to the exchange API endpoint
247
+ :returns dict[]: an array of objects representing market data
248
+ """
249
+ response = await self.publicGetMarkets(params)
250
+ #
251
+ # {
252
+ # "success": True,
253
+ # "errorCode": "",
254
+ # "message": "",
255
+ # "result": [
256
+ # {
257
+ # "name": "ETH_BTC",
258
+ # "stock": "ETH",
259
+ # "money": "BTC",
260
+ # "precision": {
261
+ # "money": "6",
262
+ # "stock": "4",
263
+ # "fee": "4"
264
+ # },
265
+ # "limits": {
266
+ # "min_amount": "0.001",
267
+ # "max_amount": "100000",
268
+ # "step_size": "0.0001",
269
+ # "min_price": "0.00001",
270
+ # "max_price": "922327",
271
+ # "tick_size": "0.00001",
272
+ # "min_total": "0.0001"
273
+ # }
274
+ # },
275
+ # ...
276
+ # ]
277
+ # }
278
+ #
279
+ markets = self.safe_value(response, 'result', [])
280
+ return self.parse_markets(markets)
281
+
282
+ def parse_market(self, market: dict) -> Market:
283
+ marketId = self.safe_string(market, 'name')
284
+ baseId = self.safe_string(market, 'stock')
285
+ quoteId = self.safe_string(market, 'money')
286
+ base = self.safe_currency_code(baseId)
287
+ quote = self.safe_currency_code(quoteId)
288
+ limits = self.safe_value(market, 'limits')
289
+ maxAmount = self.safe_string(limits, 'max_amount')
290
+ maxPrice = self.safe_string(limits, 'max_price')
291
+ return {
292
+ 'id': marketId,
293
+ 'symbol': base + '/' + quote,
294
+ 'base': base,
295
+ 'quote': quote,
296
+ 'settle': None,
297
+ 'baseId': baseId,
298
+ 'quoteId': quoteId,
299
+ 'settleId': None,
300
+ 'type': 'spot',
301
+ 'spot': True,
302
+ 'margin': False,
303
+ 'swap': False,
304
+ 'future': False,
305
+ 'option': False,
306
+ 'active': True,
307
+ 'contract': False,
308
+ 'linear': None,
309
+ 'inverse': None,
310
+ 'contractSize': None,
311
+ 'expiry': None,
312
+ 'expiryDatetime': None,
313
+ 'strike': None,
314
+ 'optionType': None,
315
+ 'precision': {
316
+ 'amount': self.safe_number(limits, 'step_size'),
317
+ 'price': self.safe_number(limits, 'tick_size'),
318
+ },
319
+ 'limits': {
320
+ 'leverage': {
321
+ 'min': None,
322
+ 'max': None,
323
+ },
324
+ 'amount': {
325
+ 'min': self.safe_number(limits, 'min_amount'),
326
+ 'max': self.parse_number(self.omit_zero(maxAmount)),
327
+ },
328
+ 'price': {
329
+ 'min': self.safe_number(limits, 'min_price'),
330
+ 'max': self.parse_number(self.omit_zero(maxPrice)),
331
+ },
332
+ 'cost': {
333
+ 'min': None,
334
+ 'max': None,
335
+ },
336
+ },
337
+ 'created': None,
338
+ 'info': market,
339
+ }
340
+
341
+ async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
342
+ """
343
+ fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
344
+ :see: https://futures-docs.poloniex.com/#get-real-time-ticker-of-all-symbols
345
+ :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
346
+ :param dict [params]: extra parameters specific to the exchange API endpoint
347
+ :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
348
+ """
349
+ await self.load_markets()
350
+ response = await self.publicGetTickers(params)
351
+ #
352
+ # {
353
+ # success: True,
354
+ # errorCode: '',
355
+ # message: '',
356
+ # result: {
357
+ # KNOLIX_BTC: {
358
+ # at: '1699252631',
359
+ # ticker: {
360
+ # bid: '0.0000332',
361
+ # ask: '0.0000333',
362
+ # low: '0.0000301',
363
+ # high: '0.0000338',
364
+ # last: '0.0000333',
365
+ # vol: '15.66',
366
+ # deal: '0.000501828',
367
+ # change: '10.63'
368
+ # }
369
+ # },
370
+ # ...
371
+ # },
372
+ # cache_time: '1699252631.103631',
373
+ # current_time: '1699252644.487566'
374
+ # }
375
+ #
376
+ result = self.safe_value(response, 'result', {})
377
+ return self.parse_tickers(result, symbols)
378
+
379
+ async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
380
+ """
381
+ fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
382
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#ticker
383
+ :param str symbol: unified symbol of the market to fetch the ticker for
384
+ :param dict [params]: extra parameters specific to the exchange API endpoint
385
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
386
+ """
387
+ await self.load_markets()
388
+ market = self.market(symbol)
389
+ request: dict = {
390
+ 'market': market['id'],
391
+ }
392
+ response = await self.publicGetTicker(self.extend(request, params))
393
+ #
394
+ # {
395
+ # success: True,
396
+ # errorCode: '',
397
+ # message: '',
398
+ # result: {
399
+ # bid: '0.342',
400
+ # ask: '0.3421',
401
+ # open: '0.3317',
402
+ # high: '0.3499',
403
+ # low: '0.3311',
404
+ # last: '0.3421',
405
+ # volume: '17855383.1',
406
+ # deal: '6107478.3423',
407
+ # change: '3.13'
408
+ # },
409
+ # cache_time: '1699252953.832795',
410
+ # current_time: '1699252958.859391'
411
+ # }
412
+ #
413
+ result = self.safe_value(response, 'result', {})
414
+ timestamp = self.safe_integer_product(response, 'cache_time', 1000)
415
+ return self.extend(
416
+ {'timestamp': timestamp, 'datetime': self.iso8601(timestamp)},
417
+ self.parse_ticker(result, market)
418
+ )
419
+
420
+ def parse_ticker(self, ticker, market: Market = None):
421
+ #
422
+ # parseTickers
423
+ #
424
+ # {
425
+ # at: '1699252631',
426
+ # ticker: {
427
+ # bid: '0.0000332',
428
+ # ask: '0.0000333',
429
+ # low: '0.0000301',
430
+ # high: '0.0000338',
431
+ # last: '0.0000333',
432
+ # vol: '15.66',
433
+ # deal: '0.000501828',
434
+ # change: '10.63'
435
+ # }
436
+ # }
437
+ #
438
+ # parseTicker
439
+ #
440
+ # {
441
+ # bid: '0.342',
442
+ # ask: '0.3421',
443
+ # open: '0.3317',
444
+ # high: '0.3499',
445
+ # low: '0.3311',
446
+ # last: '0.3421',
447
+ # volume: '17855383.1',
448
+ # deal: '6107478.3423',
449
+ # change: '3.13'
450
+ # }
451
+ #
452
+ timestamp = self.safe_integer_product(ticker, 'at', 1000)
453
+ if 'ticker' in ticker:
454
+ ticker = self.safe_value(ticker, 'ticker')
455
+ last = self.safe_string(ticker, 'last')
456
+ return self.safe_ticker({
457
+ 'symbol': self.safe_string(market, 'symbol'),
458
+ 'timestamp': timestamp,
459
+ 'datetime': self.iso8601(timestamp),
460
+ 'high': self.safe_string(ticker, 'high'),
461
+ 'low': self.safe_string(ticker, 'low'),
462
+ 'bid': self.safe_string(ticker, 'bid'),
463
+ 'bidVolume': None,
464
+ 'ask': self.safe_string(ticker, 'ask'),
465
+ 'askVolume': None,
466
+ 'vwap': None,
467
+ 'open': self.safe_string(ticker, 'open'),
468
+ 'close': last,
469
+ 'last': last,
470
+ 'previousClose': None,
471
+ 'change': None,
472
+ 'percentage': self.safe_string(ticker, 'change'),
473
+ 'average': None,
474
+ 'baseVolume': self.safe_string_2(ticker, 'vol', 'volume'),
475
+ 'quoteVolume': self.safe_string(ticker, 'deal'),
476
+ 'info': ticker,
477
+ }, market)
478
+
479
+ async def fetch_order_book(self, symbol: str, limit: Int = None, params={}):
480
+ """
481
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
482
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#depth-result
483
+ :param str symbol: unified symbol of the market to fetch the order book for
484
+ :param int [limit]: the maximum amount of order book entries to return
485
+ :param dict [params]: extra parameters specific to the exchange API endpoint
486
+ *
487
+ * EXCHANGE SPECIFIC PARAMETERS
488
+ :param str [params.interval]: 0(default), 0.00000001, 0.0000001, 0.000001, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1
489
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
490
+ """
491
+ await self.load_markets()
492
+ market = self.market(symbol)
493
+ request: dict = {
494
+ 'market': market['id'],
495
+ }
496
+ if limit is not None:
497
+ request['limit'] = limit
498
+ response = await self.publicGetDepthResult(self.extend(request, params))
499
+ #
500
+ # {
501
+ # "success": True,
502
+ # "errorCode": "",
503
+ # "message": "",
504
+ # "result": {
505
+ # "asks": [
506
+ # [
507
+ # "4.53", # Price
508
+ # "523.95" # Amount
509
+ # ],
510
+ # ...
511
+ # ],
512
+ # "bids": [
513
+ # [
514
+ # "4.51",
515
+ # "244.75"
516
+ # ],
517
+ # ...
518
+ # ]
519
+ # },
520
+ # "cache_time": 1698733470.469175,
521
+ # "current_time": 1698733470.469274
522
+ # }
523
+ #
524
+ result = self.safe_value(response, 'result', {})
525
+ timestamp = self.safe_integer_product(response, 'current_time', 1000)
526
+ return self.parse_order_book(result, market['symbol'], timestamp, 'bids', 'asks', 0, 1)
527
+
528
+ async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}):
529
+ """
530
+ get the list of most recent trades for a particular symbol
531
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#history
532
+ :param str symbol: unified symbol of the market to fetch trades for
533
+ :param int [since]: timestamp in ms of the earliest trade to fetch
534
+ :param int [limit]: 1-100, default=50
535
+ :param dict [params]: extra parameters specific to the exchange API endpoint
536
+ :param int params['lastId']: order id
537
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
538
+ """
539
+ await self.load_markets()
540
+ lastId = self.safe_integer(params, 'lastId')
541
+ if lastId is None:
542
+ raise ArgumentsRequired(self.id + ' fetchTrades() requires an extra parameter params["lastId"]')
543
+ market = self.market(symbol)
544
+ request: dict = {
545
+ 'market': market['id'],
546
+ 'lastId': lastId,
547
+ }
548
+ if limit is not None:
549
+ request['limit'] = limit
550
+ response = await self.publicGetHistory(self.extend(request, params))
551
+ #
552
+ # {
553
+ # success: True,
554
+ # errorCode: '',
555
+ # message: '',
556
+ # result: [
557
+ # {
558
+ # id: '7495738622',
559
+ # type: 'sell',
560
+ # time: '1699255565.445418',
561
+ # amount: '252.6',
562
+ # price: '0.3422'
563
+ # },
564
+ # ...
565
+ # ],
566
+ # cache_time: '1699255571.413633',
567
+ # current_time: '1699255571.413828'
568
+ # }
569
+ #
570
+ result = self.safe_list(response, 'result', [])
571
+ return self.parse_trades(result, market, since, limit)
572
+
573
+ def parse_trade(self, trade: dict, market: Market = None):
574
+ #
575
+ # fetchTrades
576
+ #
577
+ # {
578
+ # id: '7495738622',
579
+ # type: 'sell',
580
+ # time: '1699255565.445418',
581
+ # amount: '252.6',
582
+ # price: '0.3422'
583
+ # }
584
+ #
585
+ # fetchMyTrades
586
+ #
587
+ # {
588
+ # "deal_id": 7450617292, # Deal id
589
+ # "deal_time": 1698506956.66224, # Deal execution time
590
+ # "deal_order_id": 171955225751, # Deal order id
591
+ # "opposite_order_id": 171955110512, # Opposite order id
592
+ # "side": "sell", # Deal side
593
+ # "price": "0.05231", # Deal price
594
+ # "amount": "0.002", # Deal amount
595
+ # "deal": "0.00010462", # Total(price * amount)
596
+ # "deal_fee": "0.000000188316", # Deal fee
597
+ # "role": "taker", # Role. Taker or maker
598
+ # "isSelfTrade": False # is self trade
599
+ # }
600
+ #
601
+ # fetchOrderTrades
602
+ #
603
+ # {
604
+ # "id": 7429883128, # Deal id
605
+ # "time": 1698237535.41196, # Deal execution time
606
+ # "fee": "0.01755848704", # Deal fee
607
+ # "price": "34293.92", # Deal price
608
+ # "amount": "0.00032", # Deal amount
609
+ # "dealOrderId": 171366551416, # Deal order id
610
+ # "role": 1, # Deal role(1 - maker, 2 - taker)
611
+ # "deal": "10.9740544" # Total(price * amount)
612
+ # }
613
+ #
614
+ timestamp = self.safe_integer_product_2(trade, 'time', 'deal_time', 1000)
615
+ takerOrMaker = self.safe_string(trade, 'role')
616
+ if takerOrMaker == '1':
617
+ takerOrMaker = 'maker'
618
+ elif takerOrMaker == '2':
619
+ takerOrMaker = 'taker'
620
+ return self.safe_trade({
621
+ 'info': trade,
622
+ 'id': self.safe_string_2(trade, 'id', 'deal_id'),
623
+ 'timestamp': timestamp,
624
+ 'datetime': self.iso8601(timestamp),
625
+ 'symbol': self.safe_string(market, 'symbol'),
626
+ 'order': self.safe_string_2(trade, 'dealOrderId', 'deal_order_id'),
627
+ 'type': None,
628
+ 'side': self.safe_string_2(trade, 'type', 'side'),
629
+ 'takerOrMaker': takerOrMaker,
630
+ 'price': self.safe_string(trade, 'price'),
631
+ 'amount': self.safe_string(trade, 'amount'),
632
+ 'cost': self.safe_string(trade, 'deal'),
633
+ 'fee': {
634
+ 'currency': market['quote'],
635
+ 'cost': self.safe_string_2(trade, 'fee', 'deal_fee'),
636
+ },
637
+ }, market)
638
+
639
+ async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
640
+ """
641
+ fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
642
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#kline
643
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
644
+ :param str timeframe: 1m, 1h, or 1d
645
+ :param int [since]: timestamp in ms of the earliest candle to fetch
646
+ :param int [limit]: 1-500, default=50
647
+ :param dict [params]: extra parameters specific to the exchange API endpoint
648
+ :param int [params.offset]: default=0, with self value the last candles are returned
649
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
650
+ """
651
+ await self.load_markets()
652
+ market = self.market(symbol)
653
+ request: dict = {
654
+ 'market': market['id'],
655
+ 'interval': timeframe,
656
+ }
657
+ if limit is not None:
658
+ request['limit'] = limit
659
+ response = await self.publicGetMarketKline(self.extend(request, params))
660
+ #
661
+ # {
662
+ # success: True,
663
+ # errorCode: '',
664
+ # message: '',
665
+ # result: [
666
+ # [
667
+ # 1699253400, # Kline open time
668
+ # '0.3429', # Open price
669
+ # '0.3427', # Close price
670
+ # '0.3429', # Highest price
671
+ # '0.3427', # Lowest price
672
+ # '1900.4', # Volume for stock currency
673
+ # '651.46278', # Volume for money currency
674
+ # 'ADA_USDT' # Market name
675
+ # ],
676
+ # ...
677
+ # ],
678
+ # cache_time: '1699256375.030292',
679
+ # current_time: '1699256375.030494'
680
+ # }
681
+ #
682
+ result = self.safe_list(response, 'result', [])
683
+ return self.parse_ohlcvs(result, market, timeframe, since, limit)
684
+
685
+ def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
686
+ #
687
+ # [
688
+ # 1699253400, # Kline open time
689
+ # '0.3429', # Open price
690
+ # '0.3427', # Close price
691
+ # '0.3429', # Highest price
692
+ # '0.3427', # Lowest price
693
+ # '1900.4', # Volume for stock currency
694
+ # '651.46278', # Volume for money currency
695
+ # 'ADA_USDT' # Market name
696
+ # ],
697
+ #
698
+ return [
699
+ self.safe_integer_product(ohlcv, 0, 1000),
700
+ self.safe_number(ohlcv, 1),
701
+ self.safe_number(ohlcv, 3),
702
+ self.safe_number(ohlcv, 4),
703
+ self.safe_number(ohlcv, 2),
704
+ self.safe_number(ohlcv, 5),
705
+ ]
706
+
707
+ async def fetch_balance(self, params={}):
708
+ """
709
+ query for balance and get the amount of funds available for trading or funds locked in orders
710
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#all-balances
711
+ :param dict [params]: extra parameters specific to the exchange API endpoint
712
+ :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
713
+ """
714
+ await self.load_markets()
715
+ response = await self.privatePostAccountBalances(params)
716
+ #
717
+ # {
718
+ # "success": True,
719
+ # "errorCode": "",
720
+ # "message": "",
721
+ # "result": {
722
+ # "USDT": {
723
+ # "available": "71.81328046",
724
+ # "freeze": "10.46103091"
725
+ # },
726
+ # "BTC": {
727
+ # "available": "0.00135674",
728
+ # "freeze": "0.00020003"
729
+ # }
730
+ # }
731
+ # }
732
+ #
733
+ result = self.safe_value(response, 'result', {})
734
+ return self.parse_balance(result)
735
+
736
+ def parse_balance(self, response):
737
+ #
738
+ # {
739
+ # "USDT": {
740
+ # "available": "71.81328046",
741
+ # "freeze": "10.46103091"
742
+ # },
743
+ # "BTC": {
744
+ # "available": "0.00135674",
745
+ # "freeze": "0.00020003"
746
+ # }
747
+ # }
748
+ #
749
+ result: dict = {
750
+ 'info': response,
751
+ }
752
+ keys = list(response.keys())
753
+ for i in range(0, len(keys)):
754
+ currencyId = keys[i]
755
+ balance = response[currencyId]
756
+ code = self.safe_currency_code(currencyId)
757
+ used = self.safe_string(balance, 'freeze')
758
+ available = self.safe_string(balance, 'available')
759
+ account: dict = {
760
+ 'free': available,
761
+ 'used': used,
762
+ }
763
+ result[code] = account
764
+ return self.safe_balance(result)
765
+
766
+ async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
767
+ """
768
+ create a trade order
769
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#create-order
770
+ :param str symbol: unified symbol of the market to create an order in
771
+ :param str type: must be 'limit'
772
+ :param str side: 'buy' or 'sell'
773
+ :param float amount: how much of currency you want to trade in units of base currency
774
+ :param float price: the price at which the order is to be fullfilled, in units of the quote currency
775
+ :param dict [params]: extra parameters specific to the exchange API endpoint
776
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
777
+ """
778
+ await self.load_markets()
779
+ if type == 'market':
780
+ raise BadRequest(self.id + ' createOrder() can only accept orders with type "limit"')
781
+ market = self.market(symbol)
782
+ request: dict = {
783
+ 'market': market['id'],
784
+ 'side': side,
785
+ 'amount': self.amount_to_precision(symbol, amount),
786
+ 'price': self.price_to_precision(symbol, price),
787
+ }
788
+ response = await self.privatePostOrderNew(self.extend(request, params))
789
+ #
790
+ # {
791
+ # "success": True,
792
+ # "errorCode": "",
793
+ # "message": "",
794
+ # "result": {
795
+ # "orderId": 171906478744, # Order id
796
+ # "market": "ETH_BTC", # Market name
797
+ # "price": "0.04348", # Price
798
+ # "side": "buy", # Side
799
+ # "type": "limit", # Order type
800
+ # "timestamp": 1698484861.746517, # Order creation time
801
+ # "dealMoney": "0", # Filled total
802
+ # "dealStock": "0", # Filled amount
803
+ # "amount": "0.0277", # Original amount
804
+ # "takerFee": "0.002", # taker fee
805
+ # "makerFee": "0.002", # maker fee
806
+ # "left": "0.0277", # Unfilled amount
807
+ # "dealFee": "0" # Filled fee
808
+ # }
809
+ # }
810
+ #
811
+ result = self.safe_dict(response, 'result')
812
+ return self.parse_order(result, market)
813
+
814
+ async def cancel_order(self, id: str, symbol: Str = None, params={}):
815
+ """
816
+ cancels an open order
817
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#cancel-order
818
+ :param str id: order id
819
+ :param str symbol: unified symbol of the market the order was made in
820
+ :param dict [params]: extra parameters specific to the exchange API endpoint
821
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
822
+ """
823
+ if symbol is None:
824
+ raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
825
+ await self.load_markets()
826
+ market = self.market(symbol)
827
+ request: dict = {
828
+ 'market': market['id'],
829
+ 'orderId': id,
830
+ }
831
+ response = await self.privatePostOrderCancel(self.extend(request, params))
832
+ #
833
+ # {
834
+ # "success": True,
835
+ # "errorCode": "",
836
+ # "message": "",
837
+ # "result": {
838
+ # "orderId": 171906478744,
839
+ # "market": "ETH_BTC",
840
+ # "price": "0.04348",
841
+ # "side": "buy",
842
+ # "type": "limit",
843
+ # "timestamp": 1698484861.746517,
844
+ # "dealMoney": "0",
845
+ # "dealStock": "0",
846
+ # "amount": "0.0277",
847
+ # "takerFee": "0.002",
848
+ # "makerFee": "0.002",
849
+ # "left": "0.0277",
850
+ # "dealFee": "0"
851
+ # }
852
+ # }
853
+ #
854
+ result = self.safe_dict(response, 'result')
855
+ return self.parse_order(result)
856
+
857
+ async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
858
+ """
859
+ fetch all unfilled currently open orders
860
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#open-orders
861
+ :param str symbol: unified market symbol of the market orders were made in
862
+ :param int [since]: the earliest time in ms to fetch orders for
863
+ :param int [limit]: the maximum number of order structures to retrieve
864
+ :param dict [params]: extra parameters specific to the exchange API endpoint
865
+ *
866
+ * EXCHANGE SPECIFIC PARAMETERS
867
+ :param int [params.offset]: 0-10000, default=0
868
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
869
+ """
870
+ if symbol is None:
871
+ raise ArgumentsRequired(self.id + ' fetchOpenOrders() requires the symbol argument')
872
+ await self.load_markets()
873
+ market = self.market(symbol)
874
+ request: dict = {
875
+ 'market': market['id'],
876
+ }
877
+ if limit is not None:
878
+ request['limit'] = limit
879
+ response = await self.privatePostOrders(self.extend(request, params))
880
+ #
881
+ # {
882
+ # "success": True,
883
+ # "errorCode": "",
884
+ # "message": "",
885
+ # "result": [
886
+ # {
887
+ # "orderId": 171913325964,
888
+ # "market": "ETH_BTC",
889
+ # "price": "0.06534",
890
+ # "side": "sell",
891
+ # "type": "limit",
892
+ # "timestamp": 1698487986.836821,
893
+ # "dealMoney": "0",
894
+ # "dealStock": "0",
895
+ # "amount": "0.0018",
896
+ # "takerFee": "0.0018",
897
+ # "makerFee": "0.0016",
898
+ # "left": "0.0018",
899
+ # "dealFee": "0"
900
+ # },
901
+ # ...
902
+ # ]
903
+ # }
904
+ #
905
+ result = self.safe_list(response, 'result', [])
906
+ return self.parse_orders(result, market, since, limit)
907
+
908
+ async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
909
+ """
910
+ fetch all the trades made from a single order
911
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#deals-by-order-id
912
+ :param str id: order id
913
+ :param str symbol: unified market symbol
914
+ :param int [since]: the earliest time in ms to fetch trades for
915
+ :param int [limit]: 1-100, default=50
916
+ :param dict [params]: extra parameters specific to the exchange API endpoint
917
+ *
918
+ * EXCHANGE SPECIFIC PARAMETERS
919
+ :param int [params.offset]: 0-10000, default=0
920
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
921
+ """
922
+ await self.load_markets()
923
+ market = self.safe_market(symbol)
924
+ request: dict = {
925
+ 'orderId': id,
926
+ }
927
+ if limit is not None:
928
+ request['limit'] = limit
929
+ response = await self.privatePostAccountOrder(self.extend(request, params))
930
+ #
931
+ # {
932
+ # "success": True,
933
+ # "errorCode": "",
934
+ # "message": "",
935
+ # "result": {
936
+ # "offset": 0,
937
+ # "limit": 50,
938
+ # "records": [
939
+ # {
940
+ # "id": 7429883128, # Deal id
941
+ # "time": 1698237535.41196, # Deal execution time
942
+ # "fee": "0.01755848704", # Deal fee
943
+ # "price": "34293.92", # Deal price
944
+ # "amount": "0.00032", # Deal amount
945
+ # "dealOrderId": 171366551416, # Deal order id
946
+ # "role": 1, # Deal role(1 - maker, 2 - taker)
947
+ # "deal": "10.9740544" # Total(price * amount)
948
+ # }
949
+ # ]
950
+ # }
951
+ # }
952
+ #
953
+ result = self.safe_value(response, 'result', {})
954
+ records = self.safe_list(result, 'records', [])
955
+ return self.parse_trades(records, market, since, limit)
956
+
957
+ async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
958
+ """
959
+ fetch all trades made by the user, only the transaction records in the past 3 month can be queried, the time between since and params["until"] cannot be longer than 24 hours
960
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#deals-history-by-market
961
+ :param str symbol: unified market symbol of the market orders were made in
962
+ :param int [since]: the earliest time in ms to fetch orders for, default = params["until"] - 86400000
963
+ :param int [limit]: 1-100, default=50
964
+ :param dict [params]: extra parameters specific to the exchange API endpoint
965
+ :param int [params.until]: the latest time in ms to fetch orders for, default = current timestamp or since + 86400000
966
+ *
967
+ * EXCHANGE SPECIFIC PARAMETERS
968
+ :param int [params.offset]: 0-10000, default=0
969
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
970
+ """
971
+ if symbol is None:
972
+ raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
973
+ await self.load_markets()
974
+ until = self.safe_integer(params, 'until')
975
+ params = self.omit(params, 'until')
976
+ if until is None:
977
+ if since is None:
978
+ until = self.milliseconds()
979
+ else:
980
+ until = since + 86400000
981
+ if since is None:
982
+ since = until - 86400000
983
+ if (until - since) > 86400000:
984
+ raise BadRequest(self.id + ' fetchMyTrades() the time between since and params["until"] cannot be greater than 24 hours')
985
+ market = self.market(symbol)
986
+ request: dict = {
987
+ 'market': market['id'],
988
+ 'startTime': self.parse_to_int(since / 1000),
989
+ 'endTime': self.parse_to_int(until / 1000),
990
+ }
991
+ if limit is not None:
992
+ request['limit'] = limit
993
+ response = await self.privatePostAccountMarketDealHistory(self.extend(request, params))
994
+ #
995
+ # {
996
+ # "success": True,
997
+ # "errorCode": "",
998
+ # "message": "",
999
+ # "result": {
1000
+ # "total": 2, # Total records in the queried range
1001
+ # "deals": [
1002
+ # {
1003
+ # "deal_id": 7450617292, # Deal id
1004
+ # "deal_time": 1698506956.66224, # Deal execution time
1005
+ # "deal_order_id": 171955225751, # Deal order id
1006
+ # "opposite_order_id": 171955110512, # Opposite order id
1007
+ # "side": "sell", # Deal side
1008
+ # "price": "0.05231", # Deal price
1009
+ # "amount": "0.002", # Deal amount
1010
+ # "deal": "0.00010462", # Total(price * amount)
1011
+ # "deal_fee": "0.000000188316", # Deal fee
1012
+ # "role": "taker", # Role. Taker or maker
1013
+ # "isSelfTrade": False # is self trade
1014
+ # },
1015
+ # ...
1016
+ # ]
1017
+ # }
1018
+ # }
1019
+ #
1020
+ result = self.safe_value(response, 'result', {})
1021
+ deals = self.safe_list(result, 'deals', [])
1022
+ return self.parse_trades(deals, market, since, limit)
1023
+
1024
+ async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1025
+ """
1026
+ fetches information on multiple closed orders made by the user, the time between since and params["untnil"] cannot be longer than 24 hours
1027
+ :see: https://github.com/P2B-team/p2b-api-docs/blob/master/api-doc.md#orders-history-by-market
1028
+ :param str symbol: unified market symbol of the market orders were made in
1029
+ :param int [since]: the earliest time in ms to fetch orders for, default = params["until"] - 86400000
1030
+ :param int [limit]: 1-100, default=50
1031
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1032
+ :param int [params.until]: the latest time in ms to fetch orders for, default = current timestamp or since + 86400000
1033
+ *
1034
+ * EXCHANGE SPECIFIC PARAMETERS
1035
+ :param int [params.offset]: 0-10000, default=0
1036
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1037
+ """
1038
+ await self.load_markets()
1039
+ until = self.safe_integer(params, 'until')
1040
+ params = self.omit(params, 'until')
1041
+ market: Market = None
1042
+ if symbol is not None:
1043
+ market = self.market(symbol)
1044
+ if until is None:
1045
+ if since is None:
1046
+ until = self.milliseconds()
1047
+ else:
1048
+ until = since + 86400000
1049
+ if since is None:
1050
+ since = until - 86400000
1051
+ if (until - since) > 86400000:
1052
+ raise BadRequest(self.id + ' fetchClosedOrders() the time between since and params["until"] cannot be greater than 24 hours')
1053
+ request: dict = {
1054
+ 'startTime': self.parse_to_int(since / 1000),
1055
+ 'endTime': self.parse_to_int(until / 1000),
1056
+ }
1057
+ if market is not None:
1058
+ request['market'] = market['id']
1059
+ if limit is not None:
1060
+ request['limit'] = limit
1061
+ response = await self.privatePostAccountOrderHistory(self.extend(request, params))
1062
+ #
1063
+ # {
1064
+ # "success": True,
1065
+ # "errorCode": "",
1066
+ # "message": "",
1067
+ # "result": {
1068
+ # "LTC_USDT": [
1069
+ # {
1070
+ # "id": 173985944395,
1071
+ # "amount": "0.1",
1072
+ # "price": "73",
1073
+ # "type": "limit",
1074
+ # "side": "sell",
1075
+ # "ctime": 1699436194.390845,
1076
+ # "ftime": 1699436194.390847,
1077
+ # "market": "LTC_USDT",
1078
+ # "takerFee": "0.002",
1079
+ # "makerFee": "0.002",
1080
+ # "dealFee": "0.01474",
1081
+ # "dealStock": "0.1",
1082
+ # "dealMoney": "7.37"
1083
+ # }
1084
+ # ]
1085
+ # }
1086
+ # }
1087
+ #
1088
+ result = self.safe_value(response, 'result')
1089
+ orders = []
1090
+ keys = list(result.keys())
1091
+ for i in range(0, len(keys)):
1092
+ marketId = keys[i]
1093
+ marketOrders = result[marketId]
1094
+ parsedOrders = self.parse_orders(marketOrders, market, since, limit)
1095
+ orders = self.array_concat(orders, parsedOrders)
1096
+ return orders
1097
+
1098
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1099
+ #
1100
+ # cancelOrder, fetchOpenOrders, createOrder
1101
+ #
1102
+ # {
1103
+ # "orderId": 171906478744,
1104
+ # "market": "ETH_BTC",
1105
+ # "price": "0.04348",
1106
+ # "side": "buy",
1107
+ # "type": "limit",
1108
+ # "timestamp": 1698484861.746517,
1109
+ # "dealMoney": "0",
1110
+ # "dealStock": "0",
1111
+ # "amount": "0.0277",
1112
+ # "takerFee": "0.002",
1113
+ # "makerFee": "0.002",
1114
+ # "left": "0.0277",
1115
+ # "dealFee": "0"
1116
+ # }
1117
+ #
1118
+ # fetchClosedOrders
1119
+ #
1120
+ # {
1121
+ # "id": 171366547790, # Order id
1122
+ # "amount": "0.00032", # Original amount
1123
+ # "price": "34293.92", # Order price
1124
+ # "type": "limit", # Order type
1125
+ # "side": "sell", # Order side
1126
+ # "ctime": 1698237533.497241, # Order creation time
1127
+ # "ftime": 1698237535.41196, # Order fill time
1128
+ # "market": "BTC_USDT", # Market name
1129
+ # "takerFee": "0.0018", # Taker fee
1130
+ # "makerFee": "0.0016", # Market fee
1131
+ # "dealFee": "0.01755848704", # Deal fee
1132
+ # "dealStock": "0.00032", # Filled amount
1133
+ # "dealMoney": "10.9740544" # Filled total
1134
+ # }
1135
+ #
1136
+ timestamp = self.safe_integer_product_2(order, 'timestamp', 'ctime', 1000)
1137
+ marketId = self.safe_string(order, 'market')
1138
+ market = self.safe_market(marketId, market)
1139
+ return self.safe_order({
1140
+ 'info': order,
1141
+ 'id': self.safe_string_2(order, 'id', 'orderId'),
1142
+ 'clientOrderId': None,
1143
+ 'timestamp': timestamp,
1144
+ 'datetime': self.iso8601(timestamp),
1145
+ 'lastTradeTimestamp': None,
1146
+ 'symbol': market['symbol'],
1147
+ 'type': self.safe_string(order, 'type'),
1148
+ 'timeInForce': None,
1149
+ 'postOnly': None,
1150
+ 'side': self.safe_string(order, 'side'),
1151
+ 'price': self.safe_string(order, 'price'),
1152
+ 'stopPrice': None,
1153
+ 'amount': self.safe_string(order, 'amount'),
1154
+ 'cost': None,
1155
+ 'average': None,
1156
+ 'filled': self.safe_string(order, 'dealStock'),
1157
+ 'remaining': self.safe_string(order, 'left'),
1158
+ 'status': None,
1159
+ 'fee': {
1160
+ 'currency': market['quote'],
1161
+ 'cost': self.safe_string(order, 'dealFee'),
1162
+ },
1163
+ 'trades': None,
1164
+ }, market)
1165
+
1166
+ def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
1167
+ url = self.urls['api'][api] + '/' + self.implode_params(path, params)
1168
+ params = self.omit(params, self.extract_params(path))
1169
+ if method == 'GET':
1170
+ if params:
1171
+ url += '?' + self.urlencode(params)
1172
+ if api == 'private':
1173
+ params['request'] = '/api/v2/' + path
1174
+ params['nonce'] = str(self.nonce())
1175
+ payload = self.string_to_base64(self.json(params)) # Body json encoded in base64
1176
+ headers = {
1177
+ 'Content-Type': 'application/json',
1178
+ 'X-TXC-APIKEY': self.apiKey,
1179
+ 'X-TXC-PAYLOAD': payload,
1180
+ 'X-TXC-SIGNATURE': self.hmac(self.encode(payload), self.encode(self.secret), hashlib.sha512),
1181
+ }
1182
+ body = self.json(params)
1183
+ return {'url': url, 'method': method, 'body': body, 'headers': headers}
1184
+
1185
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1186
+ if response is None:
1187
+ return None
1188
+ if code == 400:
1189
+ error = self.safe_value(response, 'error')
1190
+ errorCode = self.safe_string(error, 'code')
1191
+ feedback = self.id + ' ' + self.json(response)
1192
+ self.throw_exactly_matched_exception(self.exceptions, errorCode, feedback)
1193
+ # fallback to default error handler
1194
+ return None