ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.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 (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +8 -8
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +10 -10
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +32 -38
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +32 -27
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +34 -30
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +15 -14
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +30 -36
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +29 -24
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +32 -28
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +13 -12
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.1.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
@@ -1,29 +0,0 @@
1
-
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
-
7
- from ccxt.test.base.test_account import test_account # noqa E402
8
- from ccxt.test.base.test_balance import test_balance # noqa E402
9
- from ccxt.test.base.test_borrow_interest import test_borrow_interest # noqa E402
10
- from ccxt.test.base.test_borrow_rate import test_borrow_rate # noqa E402
11
- from ccxt.test.base.test_currency import test_currency # noqa E402
12
- from ccxt.test.base.test_deposit_withdrawal import test_deposit_withdrawal # noqa E402
13
- from ccxt.test.base.test_funding_rate_history import test_funding_rate_history # noqa E402
14
- from ccxt.test.base.test_last_price import test_last_price # noqa E402
15
- from ccxt.test.base.test_ledger_entry import test_ledger_entry # noqa E402
16
- from ccxt.test.base.test_leverage_tier import test_leverage_tier # noqa E402
17
- from ccxt.test.base.test_liquidation import test_liquidation # noqa E402
18
- from ccxt.test.base.test_margin_mode import test_margin_mode # noqa E402
19
- from ccxt.test.base.test_margin_modification import test_margin_modification # noqa E402
20
- from ccxt.test.base.test_market import test_market # noqa E402
21
- from ccxt.test.base.test_ohlcv import test_ohlcv # noqa E402
22
- from ccxt.test.base.test_open_interest import test_open_interest # noqa E402
23
- from ccxt.test.base.test_order import test_order # noqa E402
24
- from ccxt.test.base.test_order_book import test_order_book # noqa E402
25
- from ccxt.test.base.test_position import test_position # noqa E402
26
- from ccxt.test.base.test_status import test_status # noqa E402
27
- from ccxt.test.base.test_ticker import test_ticker # noqa E402
28
- from ccxt.test.base.test_trade import test_trade # noqa E402
29
- from ccxt.test.base.test_trading_fee import test_trading_fee # noqa E402
@@ -1,26 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_account(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'info': {},
20
- 'code': 'BTC',
21
- 'type': 'spot',
22
- 'id': '12345',
23
- }
24
- empty_allowed_for = ['code', 'id']
25
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
26
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['code'])
@@ -1,56 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_balance(exchange, skipped_properties, method, entry):
19
- format = {
20
- 'free': {},
21
- 'used': {},
22
- 'total': {},
23
- 'info': {},
24
- }
25
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format)
26
- log_text = test_shared_methods.log_template(exchange, method, entry)
27
- #
28
- codes_total = list(entry['total'].keys())
29
- codes_free = list(entry['free'].keys())
30
- codes_used = list(entry['used'].keys())
31
- test_shared_methods.assert_non_emtpy_array(exchange, skipped_properties, method, codes_total, 'total')
32
- test_shared_methods.assert_non_emtpy_array(exchange, skipped_properties, method, codes_free, 'free')
33
- test_shared_methods.assert_non_emtpy_array(exchange, skipped_properties, method, codes_used, 'used')
34
- all_codes = exchange.array_concat(codes_total, codes_free)
35
- all_codes = exchange.array_concat(all_codes, codes_used)
36
- codes_length = len(codes_total)
37
- free_length = len(codes_free)
38
- used_length = len(codes_used)
39
- assert (codes_length == free_length) or (codes_length == used_length), 'free and total and used codes have different lengths' + log_text
40
- for i in range(0, len(all_codes)):
41
- code = all_codes[i]
42
- # testSharedMethods.assertCurrencyCode (exchange, skippedProperties, method, entry, code);
43
- assert code in entry['total'], 'code ' + code + ' not in total' + log_text
44
- assert code in entry['free'], 'code ' + code + ' not in free' + log_text
45
- assert code in entry['used'], 'code ' + code + ' not in used' + log_text
46
- total = exchange.safe_string(entry['total'], code)
47
- free = exchange.safe_string(entry['free'], code)
48
- used = exchange.safe_string(entry['used'], code)
49
- assert total is not None, 'total is undefined' + log_text
50
- assert free is not None, 'free is undefined' + log_text
51
- assert used is not None, 'used is undefined' + log_text
52
- assert Precise.string_ge(total, '0'), 'total is not positive' + log_text
53
- assert Precise.string_ge(free, '0'), 'free is not positive' + log_text
54
- assert Precise.string_ge(used, '0'), 'used is not positive' + log_text
55
- sum_free_used = Precise.string_add(free, used)
56
- assert Precise.string_eq(total, sum_free_used), 'free and used do not sum to total' + log_text
@@ -1,35 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_borrow_interest(exchange, skipped_properties, method, entry, requested_code, requested_symbol):
18
- format = {
19
- 'info': {},
20
- 'account': 'BTC/USDT',
21
- 'currency': 'USDT',
22
- 'interest': exchange.parse_number('0.1444'),
23
- 'interestRate': exchange.parse_number('0.0006'),
24
- 'amountBorrowed': exchange.parse_number('30.0'),
25
- 'timestamp': 1638230400000,
26
- 'datetime': '2021-11-30T00:00:00.000Z',
27
- }
28
- empty_allowed_for = ['account']
29
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
30
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
31
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['currency'], requested_code)
32
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, entry['account'], requested_symbol)
33
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'interest', '0')
34
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'interestRate', '0')
35
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'amountBorrowed', '0')
@@ -1,32 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_borrow_rate(exchange, skipped_properties, method, entry, requested_code):
18
- format = {
19
- 'info': {},
20
- 'currency': 'USDT',
21
- 'timestamp': 1638230400000,
22
- 'datetime': '2021-11-30T00:00:00.000Z',
23
- 'rate': exchange.parse_number('0.0006'),
24
- 'period': 86400000,
25
- }
26
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format)
27
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
28
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['currency'], requested_code)
29
- #
30
- # assert (borrowRate['period'] === 86400000 || borrowRate['period'] === 3600000) # Milliseconds in an hour or a day
31
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'period', '0')
32
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'rate', '0')
@@ -1,51 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # THIS IS A MOCKUP FILE IN PROGRESS
4
-
5
- # import argparse
6
- import os
7
- import sys
8
- # import json
9
- # import time
10
-
11
- # ------------------------------------------------------------------------------
12
-
13
- root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
14
- sys.path.append(root)
15
-
16
- # ------------------------------------------------------------------------------
17
-
18
- import ccxt # noqa: E402
19
-
20
- # ------------------------------------------------------------------------------
21
-
22
- taker = 0.0025
23
- maker = 0.0010
24
- price = 100.00
25
- amount = 10.00
26
-
27
- market = {
28
- 'id': 'foobar',
29
- 'symbol': 'FOO/BAR',
30
- 'base': 'FOO',
31
- 'quote': 'BAR',
32
- 'taker': taker,
33
- 'maker': maker,
34
- 'precision': {
35
- 'price': 8,
36
- 'amount': 8,
37
- }
38
- }
39
-
40
- exchange = ccxt.Exchange({
41
- 'id': 'mock',
42
- 'markets': {'FOO/BAR': market},
43
- })
44
-
45
- exchange.calculate_fee(market['symbol'], 'limit', 'sell', amount, price, 'taker', {})
46
-
47
- # {'rate': {'quote': 0.0025, 'base': 0.0}, 'cost': {'quote': 2.5, 'base': 0.0}}
48
-
49
- exchange.calculate_fee(market['symbol'], 'limit', 'sell', amount, price, 'maker', {})
50
-
51
- # {'rate': {'quote': 0.001, 'base': 0.0}, 'cost': {'quote': 1.0, 'base': 0.0}}
@@ -1,127 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
-
14
- import ccxt # noqa: F402
15
- import hashlib # noqa: F402
16
-
17
- Exchange = ccxt.Exchange
18
- hash = Exchange.hash
19
- hmac = Exchange.hmac
20
- ecdsa = Exchange.ecdsa
21
- eddsa = Exchange.eddsa
22
- jwt = Exchange.jwt
23
- crc32 = Exchange.crc32
24
- rsa = Exchange.rsa
25
- encode = Exchange.encode
26
-
27
-
28
- def equals(a, b):
29
- return a == b
30
-
31
-
32
- exchange = Exchange()
33
-
34
- # ---------------------------------------------------------------------------------------------------------------------
35
-
36
- assert hash(encode(''), 'sha256', 'hex') == 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
37
- assert hash(encode('cheese'), 'sha256', 'hex') == '873ac9ffea4dd04fa719e8920cd6938f0c23cd678af330939cff53c3d2855f34'
38
-
39
- assert hash(encode(''), 'md5', 'hex') == 'd41d8cd98f00b204e9800998ecf8427e'
40
- assert hash(encode('sexyfish'), 'md5', 'hex') == 'c8a35464aa9d5683585786f44d5889f8'
41
-
42
- assert hash(encode(''), 'sha1', 'hex') == 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
43
- assert hash(encode('nutella'), 'sha1', 'hex') == 'b3d60a34b744159793c483b067c56d8affc5111a'
44
- assert hmac(encode('hello'), encode('there'), hashlib.sha256, 'hex') == '551e1c1ecbce0fe9b643745a376584a6289f5f43a46861b315fac9edc8d52a26'
45
- assert hmac(encode('a message'), encode('a secret'), hashlib.md5, 'hex') == '0bfa503bdbc7358185fcd49b4869e23d'
46
-
47
- # ---------------------------------------------------------------------------------------------------------------------
48
-
49
-
50
- privateKey = '1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a'
51
-
52
-
53
- assert(equals(ecdsa('1a', privateKey, 'secp256k1', 'sha256'), {
54
- 'r': '23dcb2a2a3728a35eb1a35cc01743c4609550d9cceaf2083550f13a9eb135f9f',
55
- 's': '317963fcac18e4ec9f7921b97d7ea0c82a873dd6299cbfb6af016e08ef5ed667',
56
- 'v': 0,
57
- }))
58
-
59
-
60
- assert(equals(ecdsa(privateKey, privateKey, 'secp256k1', None), {
61
- 'r': 'b84a36a6fbabd5277ede578448b93d48e70b38efb5b15b1d4e2a298accf938b1',
62
- 's': '66ebfb8221cda925526e699a59cd221bb4cc84bdc563024b1802c4d9e1d8bbe9',
63
- 'v': 1,
64
- }))
65
-
66
- # ---------------------------------------------------------------------------------------------------------------------
67
-
68
- #
69
- # assert exchange.hashMessage(privateKey) == '0x59ea5d98c3500c3729f95cf98aa91663f498518cc401360df2912742c232207f'
70
- #
71
- # assert(equals(exchange.signHash('0x59ea5d98c3500c3729f95cf98aa91663f498518cc401360df2912742c232207f', privateKey), {
72
- # 'r': '0x6f684aa41c02da83dac3039d8805ddbe79a03b1297e247c7742cab8dfc19d341',
73
- # 's': '0x62473881674550563cb028ff40a7846fd53620ddf40a20cc1003b8484a109a4a',
74
- # 'v': 27
75
- # }))
76
- #
77
- # assert(equals(exchange.signMessage(privateKey, privateKey), {
78
- # 'r': '0x6f684aa41c02da83dac3039d8805ddbe79a03b1297e247c7742cab8dfc19d341',
79
- # 's': '0x62473881674550563cb028ff40a7846fd53620ddf40a20cc1003b8484a109a4a',
80
- # 'v': 27
81
- # }))
82
- #
83
- # ---------------------------------------------------------------------------------------------------------------------
84
-
85
- pemKeyArray = [
86
- '-----BEGIN RSA PRIVATE KEY-----',
87
- 'MIIEpAIBAAKCAQEAqUtXQXv2uSm9zPvdJTRpu5/65rBjAoHmIiowAs+u7fY0QP9O',
88
- '+T8CZRQjvZrfPomBiccjCxDo8mm7GkmL67rs9s7VOMQFvpTTtMBeglNSEbXJ3wTt',
89
- '7WM5gD3ZAbhfGtwWdGpcOMX0hV5/d/fiw1zQk0+AooayTryZ7HV+DQcD1sGTYYir',
90
- 'LePUGkKV2NCvKtGOQfRAtuo0ccigMxMvEhWuExCc9Fhd077OpXMc0n7OiFqA2JWN',
91
- 'jlocM9S71Srvw/lDos8a7lGaFUV8gP1CsQY/4qTju6hhsRd4lFujVr5J9FqmDbnv',
92
- 'wQ79SSu6+lT0+ToFdDHiYOorBK2ESFR7EzlyLwIDAQABAoIBAEobQMbZjNbg/sSM',
93
- 'O/HdT6tiDGKPM8gVNLgf34RbhSeFbrpFCDzy6Al3F24YLUEi0CGPmjdt34q93blU',
94
- 'GHvIB5LCV3PR2vHiFAo7ayOBdZtrCEMn1T7lAHaynBu0qW0IiovLQzNW9AKtqv7I',
95
- '8+qw5lyVoKmEbOkqhfaMN/Fb8MJAo3yEVyhyp4EjtFhqDQ9DuHEjp1jGthnMgm+4',
96
- 'qFyELf0DXZSAN+R9IGDqWPyo78lOcPW4pgeLuoLQ6Nn/2JAEGHFt1a7zMEw5yYbR',
97
- 'XB89Bh0dheSmopBN6Heay4YuhnNKua37OlL1/nhKpLGUNE3z/UOXeiUiMeE1C2i+',
98
- 'GjK+xgECgYEA4XH63rJ3VYDHHWUGlWffFWkEpgR4BDEkZ8MyVYQoUjQA2TpCvQ2+',
99
- 'bR7aAIGXhBnRTrIBNu9m4+am0aUfi1hVmVHqt1b2vFgEb9uKuO4U62tCFpeji+Rz',
100
- '8C8QJyu5v5OUWdQZ4EA0d7ljeoTl50g8tpcGsDhnImLt+/jvJuFt8dECgYEAwD0n',
101
- 'rhlkEjKVHxu1xwKeczxYCqqcUV9Quq8HnPh4VJQ77ljfZ57V7sAKrFDi5XfVD9jS',
102
- 'oJPwxjw6za134VobhdvCM6WNs6AJmbR8E/b5kDMbGaZn27vt+/8JfnGaWBqpDi6W',
103
- 'a5xoJOqmcMBQBK1YleZDoY4PLbk+onVKLMfGI/8CgYEAkyUIv8euGdGWpHnm5SdJ',
104
- 'tLi5vv4Vs267uzntJWG/y3+DukTLgIdy7dgAI+pxkVgkg/+syUVSW5eU9CqZPyLl',
105
- 'o8+Sqh2Jp36vTq71iSRj5RA5r3ND3K+8eFzPZzGj6AWUA1lrljFxzV7kLfiF8gH1',
106
- 'FpvWUrhNoGT/vcFJno/uabECgYAecRC5hxfLserfVDoC261PvjyK492BHUDhbxob',
107
- 'h1U2v4qGAdjOxd5Gwm5uPxjPEZzRt5oTB5pXKe5953xWWTiGh/hGyW6ZBTy/9E65',
108
- 'sqBub0lZVHqZ1zamcwqD1WWFkiM3NbVoMQpk3iuhKzMAqpqekiofiSlqKi16+GvY',
109
- 'j4IW7QKBgQCrIUckPZ6IY3ERIN1IL4TIcK2gOJcznp7fLWpC+sv35ya3OhtDXKFt',
110
- 'GjIHmwLuiUNc0iPzA9Rw89W0zIkKWmWcxM88/ithdxh3MEeNDUGSnd4hQ9SECwxB',
111
- 'Wem3eBT7I4VtFYoaTE3/bX1SKfgBdTzIRqWKSDpgBNZg/P2Tc+s11g==',
112
- '-----END RSA PRIVATE KEY-----',
113
- ]
114
-
115
-
116
- pemKey = "\n".join(pemKeyArray)
117
- assert rsa('hello', pemKey, 'sha256') == 'PqHotvSEBvM/AejnMOWBXUcOf3uHtcGu2zAYdlYdnlNSSQ80Uq4lcyAEstnZ2AnQJ9l5TCC53uoRZ26GQ47zlACgqtYglmPhQKLvQ5fldRzeBauYhGgM2C0mUuUGxh074fNGbK+bgmwEmDMIrnSPtXwiCqTAHh+8VEnC7us3t09D61y298dPBJYEBNN3dFZT0w0pCIQg3j3DSiFJOCfywmOKyXqS1pvmk6A38DVclQZORQ5WZXp2yvSKRLjxpzjxDl76h1GfbBl7sMLEFMyzk0wyIhIz8ZELMibYn036G4X1IcSlDcimthEkIbn2QjM0ntyYDZIS4QnsMBjvkV2UHw=='
118
- assert rsa('poopy', pemKey, 'sha256') == 'or069qHwRDyl162T1s5G5+LfLnvDxlgk9kEsJvwI3vM02KB1LHW4+8gWqsV4TENZpeqed2Tb4na6ex+L/UR8JxJnnZtpVp33nUBgcp3miqp/YhcGN4++qolP4YN/21/AyfLFZW+VYggc+Mhh6PJSm+0dSEWMVsP35uH+35abXVxgB8GVOn7YTOSPaL8aw7hn4wlZWf2ieikKAi7AwAjkxnd7/Bu5+cW8D+ZdPHQfSKj+XHuPXlJNuQX0MDIqhdD2yuYJOQL56eKYs6nHPlClATkndSaAemQSGKet3X3Iz1awG4MGgz2Ei6bOanlNugc0f6Rng6rdwmqiMU3G4it6cw=='
119
-
120
- assert jwt({'chicken': 'salad'}, encode(pemKey), 'sha256', True) == 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaGlja2VuIjoic2FsYWQifQ.FSKD5Y6RNzkHTuHdvG3753U7QNZ-u-GUSPfP1FMjEaK0Rr_iyQTSSmHhkdYSFFnmBvrrN_l-UwKwir52WlsgmQm9HYm0kidxbj7fWwrK2E1oe0P7OjupFjv1BZxc5W69WeaHtOPWe28tiHiON1LCnax6HgfI5lcIBsESGIIBZMVeaioQn9gDVwea7JxJvAlrhDIWZowIHTIdCQocXip7g5jREWHeEIuJNug67mwnfAFxCjvTRiTd0Bw6oBwjM3FLya-RyEyWrejQOWSuC8CNWVUHISaSmEyZ7uM6wTi2m_58TaE9mQwlef32OPErPvvBpgL5pZIyQ4ymwrCIFQLBQQ'
121
- assert jwt({'lil': 'xan'}, encode('betrayed'), 'sha256', False) == 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWwiOiJ4YW4ifQ.md-oFvZagA-NXmZoRNyJOQ7zwK-PWUMmMQ_LI9ZOKaM'
122
-
123
- assert crc32('hello', True) == 907060870
124
- assert crc32('tasty chicken breast :)', True) == 825820175
125
- assert crc32('21101:0.00123125:21102:-0.001:21100:0.710705:21103:-0.001:21096:0.71076:21104:-0.001:21094:1.0746:21105:-0.001:21093:0.710854:21106:-0.419:21092:0.01368102:21107:-0.001:21090:0.710975:21109:-0.001:21089:0.63586344:21110:-1.186213:21087:0.299:21111:-0.48751202:21086:0.9493:21112:-0.03702409:21082:0.03537667:21113:-0.712385:21081:0.00101366:21114:-0.2903:21079:0.710713:21115:-0.001:21078:0.997048:21116:-0.60089827:21077:0.23770225:21117:-0.83201:21076:0.03619135:21118:-0.09996142:21075:0.1272433:21119:-1.09681107:21074:0.7447885:21120:-0.04771792:21073:0.0011:21121:-0.91495684:21072:0.73311632:21122:-0.07940416:21071:0.09817:21123:-0.39376843:21070:0.19101052:21124:-1.51692599:21069:0.2757:21125:-0.11107322:21068:0.12480303:21126:-0.12704666:21067:0.4201:21128:-0.12804666', True) == -51055998
126
-
127
- # assert eddsa('1b1b', privateKey, 'ed25519') == '3DBaaz8z4Pq9n6ncNCjB4pFLWaWTXbjaCUqKQmBgS3w7AP6opeDqANBhPssbV3jyfJB4LfK8kGR6pu6GU8fbjMuy'
@@ -1,76 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_currency(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'id': 'btc',
20
- 'code': 'BTC',
21
- }
22
- # todo: remove fee from empty
23
- empty_allowed_for = ['name', 'fee']
24
- # todo: info key needs to be added in base, when exchange does not have fetchCurrencies
25
- is_native = exchange.has['fetchCurrencies'] and exchange.has['fetchCurrencies'] != 'emulated'
26
- currency_type = exchange.safe_string(entry, 'type')
27
- if is_native:
28
- format['info'] = {}
29
- # todo: 'name': 'Bitcoin', # uppercase string, base currency, 2 or more letters
30
- # these two fields are being dynamically added a bit below
31
- # format['withdraw'] = true; # withdraw enabled
32
- # format['deposit'] = true; # deposit enabled
33
- format['precision'] = exchange.parse_number('0.0001') # in case of SIGNIFICANT_DIGITS it will be 4 - number of digits "after the dot"
34
- format['fee'] = exchange.parse_number('0.001')
35
- format['networks'] = {}
36
- format['limits'] = {
37
- 'withdraw': {
38
- 'min': exchange.parse_number('0.01'),
39
- 'max': exchange.parse_number('1000'),
40
- },
41
- 'deposit': {
42
- 'min': exchange.parse_number('0.01'),
43
- 'max': exchange.parse_number('1000'),
44
- },
45
- }
46
- # todo: format['type'] = 'fiat|crypto'; # after all exchanges have `type` defined, romove "if" check
47
- if currency_type is not None:
48
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'type', ['fiat', 'crypto', 'other'])
49
- # only require "deposit" & "withdraw" values, when currency is not fiat, or when it's fiat, but not skipped
50
- if currency_type == 'crypto' or not ('depositForNonCrypto' in skipped_properties):
51
- format['deposit'] = True
52
- if currency_type == 'crypto' or not ('withdrawForNonCrypto' in skipped_properties):
53
- format['withdraw'] = True
54
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
55
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['code'])
56
- #
57
- test_shared_methods.check_precision_accuracy(exchange, skipped_properties, method, entry, 'precision')
58
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'fee', '0')
59
- if not ('limits' in skipped_properties):
60
- limits = exchange.safe_value(entry, 'limits', {})
61
- withdraw_limits = exchange.safe_value(limits, 'withdraw', {})
62
- deposit_limits = exchange.safe_value(limits, 'deposit', {})
63
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, withdraw_limits, 'min', '0')
64
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, withdraw_limits, 'max', '0')
65
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, deposit_limits, 'min', '0')
66
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, deposit_limits, 'max', '0')
67
- # max should be more than min (withdrawal limits)
68
- min_string_withdrawal = exchange.safe_string(withdraw_limits, 'min')
69
- if min_string_withdrawal is not None:
70
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, withdraw_limits, 'max', min_string_withdrawal)
71
- # max should be more than min (deposit limits)
72
- min_string_deposit = exchange.safe_string(deposit_limits, 'min')
73
- if min_string_deposit is not None:
74
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, deposit_limits, 'max', min_string_deposit)
75
- # check valid ID & CODE
76
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, entry, entry['id'], entry['code'])
@@ -1,109 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
-
14
- import ccxt # noqa: F402
15
- from ccxt.base.decimal_to_precision import ROUND_UP, ROUND_DOWN # noqa F401
16
-
17
- # ----------------------------------------------------------------------------
18
-
19
- # @ts-nocheck
20
-
21
- exchange = ccxt.Exchange({
22
- 'id': 'regirock',
23
- })
24
-
25
- # ----------------------------------------------------------------------------
26
-
27
- assert exchange.iso8601(514862627000) == '1986-04-26T01:23:47.000Z'
28
- assert exchange.iso8601(514862627559) == '1986-04-26T01:23:47.559Z'
29
- assert exchange.iso8601(514862627062) == '1986-04-26T01:23:47.062Z'
30
-
31
- assert exchange.iso8601(0) == '1970-01-01T00:00:00.000Z'
32
-
33
- assert exchange.iso8601(-1) is None
34
- assert exchange.iso8601() is None
35
- assert exchange.iso8601(None) is None
36
- assert exchange.iso8601('') is None
37
- assert exchange.iso8601('a') is None
38
- assert exchange.iso8601({}) is None
39
-
40
- # ----------------------------------------------------------------------------
41
-
42
- assert exchange.parse8601('1986-04-26T01:23:47.000Z') == 514862627000
43
- assert exchange.parse8601('1986-04-26T01:23:47.559Z') == 514862627559
44
- assert exchange.parse8601('1986-04-26T01:23:47.062Z') == 514862627062
45
-
46
- assert exchange.parse8601('1986-04-26T01:23:47.06Z') == 514862627060
47
- assert exchange.parse8601('1986-04-26T01:23:47.6Z') == 514862627600
48
-
49
- assert exchange.parse8601('1977-13-13T00:00:00.000Z') is None
50
- assert exchange.parse8601('1986-04-26T25:71:47.000Z') is None
51
-
52
- assert exchange.parse8601('3333') is None
53
- assert exchange.parse8601('Sr90') is None
54
- assert exchange.parse8601('') is None
55
- assert exchange.parse8601() is None
56
- assert exchange.parse8601(None) is None
57
- assert exchange.parse8601({}) is None
58
- assert exchange.parse8601(33) is None
59
-
60
- # ----------------------------------------------------------------------------
61
-
62
- assert exchange.parse_date('1986-04-26 00:00:00') == 514857600000
63
- assert exchange.parse_date('1986-04-26T01:23:47.000Z') == 514862627000
64
- assert exchange.parse_date('1986-13-13 00:00:00') is None
65
- # GMT formats
66
- assert exchange.parse_date('Mon, 29 Apr 2024 14:00:17 GMT') == 1714399217000
67
- assert exchange.parse_date('Mon, 29 Apr 2024 14:09:17 GMT') == 1714399757000
68
- assert exchange.parse_date('Sun, 29 Dec 2024 01:01:10 GMT') == 1735434070000
69
- assert exchange.parse_date('Sun, 29 Dec 2024 02:11:10 GMT') == 1735438270000
70
- assert exchange.parse_date('Sun, 08 Dec 2024 02:03:04 GMT') == 1733623384000
71
-
72
-
73
- assert exchange.roundTimeframe('5m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_DOWN) == exchange.parse8601('2019-08-12 13:20:00')
74
- assert exchange.roundTimeframe('10m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_DOWN) == exchange.parse8601('2019-08-12 13:20:00')
75
- assert exchange.roundTimeframe('30m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_DOWN) == exchange.parse8601('2019-08-12 13:00:00')
76
- assert exchange.roundTimeframe('1d', exchange.parse8601('2019-08-12 13:22:08'), ROUND_DOWN) == exchange.parse8601('2019-08-12 00:00:00')
77
-
78
- assert exchange.roundTimeframe('5m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_UP) == exchange.parse8601('2019-08-12 13:25:00')
79
- assert exchange.roundTimeframe('10m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_UP) == exchange.parse8601('2019-08-12 13:30:00')
80
- assert exchange.roundTimeframe('30m', exchange.parse8601('2019-08-12 13:22:08'), ROUND_UP) == exchange.parse8601('2019-08-12 13:30:00')
81
- assert exchange.roundTimeframe('1h', exchange.parse8601('2019-08-12 13:22:08'), ROUND_UP) == exchange.parse8601('2019-08-12 14:00:00')
82
- assert exchange.roundTimeframe('1d', exchange.parse8601('2019-08-12 13:22:08'), ROUND_UP) == exchange.parse8601('2019-08-13 00:00:00')
83
-
84
- # todo:
85
- # $self->assertSame(null, Exchange::iso8601(null))
86
- # $self->assertSame(null, Exchange::iso8601(False))
87
- # $self->assertSame(null, Exchange::iso8601([]))
88
- # $self->assertSame(null, Exchange::iso8601('abracadabra'))
89
- # $self->assertSame(null, Exchange::iso8601('1.2'))
90
- # $self->assertSame(null, Exchange::iso8601(-1))
91
- # $self->assertSame(null, Exchange::iso8601('-1'))
92
- # $self->assertSame('1970-01-01T00:00:00.000+00:00', Exchange::iso8601(0))
93
- # $self->assertSame('1970-01-01T00:00:00.000+00:00', Exchange::iso8601('0'))
94
- # $self->assertSame('1986-04-25T21:23:47.000+00:00', Exchange::iso8601(514848227000))
95
- # $self->assertSame('1986-04-25T21:23:47.000+00:00', Exchange::iso8601('514848227000'))
96
-
97
- # $self->assertSame(null, Exchange::parse_date(null))
98
- # $self->assertSame(null, Exchange::parse_date(0))
99
- # $self->assertSame(null, Exchange::parse_date('0'))
100
- # $self->assertSame(null, Exchange::parse_date('+1 day'))
101
- # $self->assertSame(null, Exchange::parse_date('1986-04-25T21:23:47+00:00 + 1 week'))
102
- # $self->assertSame(null, Exchange::parse_date('1 february'))
103
- # $self->assertSame(null, Exchange::parse_date('1986-04-26'))
104
- # $self->assertSame(0, Exchange::parse_date('1970-01-01T00:00:00.000+00:00'))
105
- # $self->assertSame(514848227000, Exchange::parse_date('1986-04-25T21:23:47+00:00'))
106
- # $self->assertSame(514848227000, Exchange::parse_date('1986-04-26T01:23:47+04:00'))
107
- # $self->assertSame(514848227000, Exchange::parse_date('25 Apr 1986 21:23:47 GMT'))
108
- # $self->assertSame(514862627000, Exchange::parse_date('1986-04-26T01:23:47.000Z'))
109
- # $self->assertSame(514862627123, Exchange::parse_date('1986-04-26T01:23:47.123Z'))