ccxt 4.4.98 → 4.4.100

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 (1035) hide show
  1. package/README.md +7 -6
  2. package/dist/373.ccxt.browser.js +7630 -0
  3. package/dist/373.ccxt.browser.min.js +1 -0
  4. package/dist/ccxt.browser.min.js +8 -8
  5. package/dist/cjs/ccxt.js +289 -286
  6. package/dist/cjs/src/abstract/alpaca.js +4 -2
  7. package/dist/cjs/src/abstract/apex.js +4 -2
  8. package/dist/cjs/src/abstract/ascendex.js +4 -2
  9. package/dist/cjs/src/abstract/bigone.js +4 -2
  10. package/dist/cjs/src/abstract/binance.js +4 -2
  11. package/dist/cjs/src/abstract/bingx.js +4 -2
  12. package/dist/cjs/src/abstract/bit2c.js +4 -2
  13. package/dist/cjs/src/abstract/bitbank.js +4 -2
  14. package/dist/cjs/src/abstract/bitbns.js +4 -2
  15. package/dist/cjs/src/abstract/bitfinex.js +4 -2
  16. package/dist/cjs/src/abstract/bitflyer.js +4 -2
  17. package/dist/cjs/src/abstract/bitget.js +4 -2
  18. package/dist/cjs/src/abstract/bithumb.js +4 -2
  19. package/dist/cjs/src/abstract/bitmart.js +4 -2
  20. package/dist/cjs/src/abstract/bitmex.js +4 -2
  21. package/dist/cjs/src/abstract/bitopro.js +4 -2
  22. package/dist/cjs/src/abstract/bitrue.js +4 -2
  23. package/dist/cjs/src/abstract/bitso.js +4 -2
  24. package/dist/cjs/src/abstract/bitstamp.js +4 -2
  25. package/dist/cjs/src/abstract/bitteam.js +4 -2
  26. package/dist/cjs/src/abstract/bittrade.js +4 -2
  27. package/dist/cjs/src/abstract/bitvavo.js +4 -2
  28. package/dist/cjs/src/abstract/blockchaincom.js +4 -2
  29. package/dist/cjs/src/abstract/blofin.js +4 -2
  30. package/dist/cjs/src/abstract/btcalpha.js +4 -2
  31. package/dist/cjs/src/abstract/btcbox.js +4 -2
  32. package/dist/cjs/src/abstract/btcmarkets.js +4 -2
  33. package/dist/cjs/src/abstract/btcturk.js +4 -2
  34. package/dist/cjs/src/abstract/bybit.js +4 -2
  35. package/dist/cjs/src/abstract/cex.js +4 -2
  36. package/dist/cjs/src/abstract/coinbase.js +4 -2
  37. package/dist/cjs/src/abstract/coinbaseexchange.js +4 -2
  38. package/dist/cjs/src/abstract/coinbaseinternational.js +4 -2
  39. package/dist/cjs/src/abstract/coincatch.js +4 -2
  40. package/dist/cjs/src/abstract/coincheck.js +4 -2
  41. package/dist/cjs/src/abstract/coinex.js +4 -2
  42. package/dist/cjs/src/abstract/coinmate.js +4 -2
  43. package/dist/cjs/src/abstract/coinmetro.js +4 -2
  44. package/dist/cjs/src/abstract/coinone.js +4 -2
  45. package/dist/cjs/src/abstract/coinsph.js +4 -2
  46. package/dist/cjs/src/abstract/coinspot.js +4 -2
  47. package/dist/cjs/src/abstract/cryptocom.js +4 -2
  48. package/dist/cjs/src/abstract/cryptomus.js +4 -2
  49. package/dist/cjs/src/abstract/defx.js +4 -2
  50. package/dist/cjs/src/abstract/delta.js +4 -2
  51. package/dist/cjs/src/abstract/deribit.js +4 -2
  52. package/dist/cjs/src/abstract/derive.js +4 -2
  53. package/dist/cjs/src/abstract/digifinex.js +4 -2
  54. package/dist/cjs/src/abstract/ellipx.js +4 -2
  55. package/dist/cjs/src/abstract/exmo.js +4 -2
  56. package/dist/cjs/src/abstract/foxbit.js +4 -2
  57. package/dist/cjs/src/abstract/gate.js +4 -2
  58. package/dist/cjs/src/abstract/gemini.js +4 -2
  59. package/dist/cjs/src/abstract/hashkey.js +4 -2
  60. package/dist/cjs/src/abstract/hibachi.js +11 -0
  61. package/dist/cjs/src/abstract/hitbtc.js +4 -2
  62. package/dist/cjs/src/abstract/hollaex.js +4 -2
  63. package/dist/cjs/src/abstract/htx.js +4 -2
  64. package/dist/cjs/src/abstract/hyperliquid.js +4 -2
  65. package/dist/cjs/src/abstract/independentreserve.js +4 -2
  66. package/dist/cjs/src/abstract/indodax.js +4 -2
  67. package/dist/cjs/src/abstract/kraken.js +4 -2
  68. package/dist/cjs/src/abstract/krakenfutures.js +4 -2
  69. package/dist/cjs/src/abstract/kucoin.js +4 -2
  70. package/dist/cjs/src/abstract/kucoinfutures.js +5 -3
  71. package/dist/cjs/src/abstract/latoken.js +4 -2
  72. package/dist/cjs/src/abstract/lbank.js +4 -2
  73. package/dist/cjs/src/abstract/luno.js +4 -2
  74. package/dist/cjs/src/abstract/mercado.js +4 -2
  75. package/dist/cjs/src/abstract/mexc.js +4 -2
  76. package/dist/cjs/src/abstract/modetrade.js +4 -2
  77. package/dist/cjs/src/abstract/ndax.js +4 -2
  78. package/dist/cjs/src/abstract/novadax.js +4 -2
  79. package/dist/cjs/src/abstract/oceanex.js +4 -2
  80. package/dist/cjs/src/abstract/okcoin.js +4 -2
  81. package/dist/cjs/src/abstract/okx.js +4 -2
  82. package/dist/cjs/src/abstract/onetrading.js +4 -2
  83. package/dist/cjs/src/abstract/oxfun.js +4 -2
  84. package/dist/cjs/src/abstract/p2b.js +4 -2
  85. package/dist/cjs/src/abstract/paradex.js +4 -2
  86. package/dist/cjs/src/abstract/paymium.js +4 -2
  87. package/dist/cjs/src/abstract/phemex.js +4 -2
  88. package/dist/cjs/src/abstract/poloniex.js +4 -2
  89. package/dist/cjs/src/abstract/probit.js +4 -2
  90. package/dist/cjs/src/abstract/timex.js +4 -2
  91. package/dist/cjs/src/abstract/tokocrypto.js +4 -2
  92. package/dist/cjs/src/abstract/tradeogre.js +4 -2
  93. package/dist/cjs/src/abstract/upbit.js +4 -2
  94. package/dist/cjs/src/abstract/vertex.js +4 -2
  95. package/dist/cjs/src/abstract/wavesexchange.js +4 -2
  96. package/dist/cjs/src/abstract/whitebit.js +4 -2
  97. package/dist/cjs/src/abstract/woo.js +4 -2
  98. package/dist/cjs/src/abstract/woofipro.js +4 -2
  99. package/dist/cjs/src/abstract/xt.js +4 -2
  100. package/dist/cjs/src/abstract/yobit.js +4 -2
  101. package/dist/cjs/src/abstract/zaif.js +4 -2
  102. package/dist/cjs/src/abstract/zonda.js +4 -2
  103. package/dist/cjs/src/alpaca.js +5 -3
  104. package/dist/cjs/src/apex.js +5 -3
  105. package/dist/cjs/src/ascendex.js +5 -3
  106. package/dist/cjs/src/base/Exchange.js +51 -11
  107. package/dist/cjs/src/base/Precise.js +0 -6
  108. package/dist/cjs/src/base/errors.js +0 -6
  109. package/dist/cjs/src/base/functions/crypto.js +1 -1
  110. package/dist/cjs/src/base/functions/encode.js +3 -3
  111. package/dist/cjs/src/base/functions/misc.js +0 -1
  112. package/dist/cjs/src/base/functions/number.js +0 -6
  113. package/dist/cjs/src/base/functions/platform.js +0 -6
  114. package/dist/cjs/src/base/functions/rsa.js +0 -1
  115. package/dist/cjs/src/base/functions/string.js +0 -6
  116. package/dist/cjs/src/base/functions/throttle.js +1 -1
  117. package/dist/cjs/src/base/functions/time.js +0 -6
  118. package/dist/cjs/src/base/functions/totp.js +0 -1
  119. package/dist/cjs/src/base/functions/type.js +0 -6
  120. package/dist/cjs/src/base/functions.js +1 -1
  121. package/dist/cjs/src/base/ws/Cache.js +0 -6
  122. package/dist/cjs/src/base/ws/Client.js +8 -3
  123. package/dist/cjs/src/base/ws/Future.js +1 -1
  124. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  126. package/dist/cjs/src/base/ws/WsClient.js +5 -3
  127. package/dist/cjs/src/bequant.js +5 -3
  128. package/dist/cjs/src/bigone.js +5 -3
  129. package/dist/cjs/src/binance.js +14 -9
  130. package/dist/cjs/src/binancecoinm.js +5 -3
  131. package/dist/cjs/src/binanceus.js +5 -3
  132. package/dist/cjs/src/binanceusdm.js +5 -3
  133. package/dist/cjs/src/bingx.js +37 -5
  134. package/dist/cjs/src/bit2c.js +5 -3
  135. package/dist/cjs/src/bitbank.js +5 -3
  136. package/dist/cjs/src/bitbns.js +5 -3
  137. package/dist/cjs/src/bitfinex.js +8 -3
  138. package/dist/cjs/src/bitflyer.js +5 -3
  139. package/dist/cjs/src/bitget.js +2177 -552
  140. package/dist/cjs/src/bithumb.js +5 -3
  141. package/dist/cjs/src/bitmart.js +5 -3
  142. package/dist/cjs/src/bitmex.js +6 -3
  143. package/dist/cjs/src/bitopro.js +5 -3
  144. package/dist/cjs/src/bitrue.js +5 -3
  145. package/dist/cjs/src/bitso.js +5 -3
  146. package/dist/cjs/src/bitstamp.js +5 -3
  147. package/dist/cjs/src/bitteam.js +5 -3
  148. package/dist/cjs/src/bittrade.js +5 -3
  149. package/dist/cjs/src/bitvavo.js +4 -2
  150. package/dist/cjs/src/blockchaincom.js +5 -3
  151. package/dist/cjs/src/blofin.js +5 -3
  152. package/dist/cjs/src/btcalpha.js +5 -3
  153. package/dist/cjs/src/btcbox.js +5 -3
  154. package/dist/cjs/src/btcmarkets.js +5 -3
  155. package/dist/cjs/src/btcturk.js +5 -3
  156. package/dist/cjs/src/bybit.js +11 -4
  157. package/dist/cjs/src/cex.js +5 -3
  158. package/dist/cjs/src/coinbase.js +4 -2
  159. package/dist/cjs/src/coinbaseadvanced.js +5 -3
  160. package/dist/cjs/src/coinbaseexchange.js +4 -2
  161. package/dist/cjs/src/coinbaseinternational.js +4 -2
  162. package/dist/cjs/src/coincatch.js +5 -3
  163. package/dist/cjs/src/coincheck.js +5 -3
  164. package/dist/cjs/src/coinex.js +73 -7
  165. package/dist/cjs/src/coinmate.js +5 -3
  166. package/dist/cjs/src/coinmetro.js +5 -3
  167. package/dist/cjs/src/coinone.js +5 -3
  168. package/dist/cjs/src/coinsph.js +4 -3
  169. package/dist/cjs/src/coinspot.js +5 -3
  170. package/dist/cjs/src/cryptocom.js +6 -4
  171. package/dist/cjs/src/cryptomus.js +5 -3
  172. package/dist/cjs/src/defx.js +5 -3
  173. package/dist/cjs/src/delta.js +5 -3
  174. package/dist/cjs/src/deribit.js +5 -3
  175. package/dist/cjs/src/derive.js +5 -3
  176. package/dist/cjs/src/digifinex.js +5 -3
  177. package/dist/cjs/src/ellipx.js +5 -3
  178. package/dist/cjs/src/exmo.js +5 -3
  179. package/dist/cjs/src/fmfwio.js +5 -3
  180. package/dist/cjs/src/foxbit.js +8 -7
  181. package/dist/cjs/src/gate.js +27 -5
  182. package/dist/cjs/src/gateio.js +5 -3
  183. package/dist/cjs/src/gemini.js +5 -3
  184. package/dist/cjs/src/hashkey.js +5 -3
  185. package/dist/cjs/src/hibachi.js +2138 -0
  186. package/dist/cjs/src/hitbtc.js +4 -3
  187. package/dist/cjs/src/hollaex.js +5 -3
  188. package/dist/cjs/src/htx.js +6 -3
  189. package/dist/cjs/src/huobi.js +5 -3
  190. package/dist/cjs/src/hyperliquid.js +84 -31
  191. package/dist/cjs/src/independentreserve.js +5 -3
  192. package/dist/cjs/src/indodax.js +5 -3
  193. package/dist/cjs/src/kraken.js +5 -3
  194. package/dist/cjs/src/krakenfutures.js +6 -3
  195. package/dist/cjs/src/kucoin.js +5 -3
  196. package/dist/cjs/src/kucoinfutures.js +6 -3
  197. package/dist/cjs/src/latoken.js +5 -3
  198. package/dist/cjs/src/lbank.js +6 -4
  199. package/dist/cjs/src/luno.js +5 -3
  200. package/dist/cjs/src/mercado.js +5 -3
  201. package/dist/cjs/src/mexc.js +12 -3
  202. package/dist/cjs/src/modetrade.js +101 -3
  203. package/dist/cjs/src/myokx.js +5 -3
  204. package/dist/cjs/src/ndax.js +5 -3
  205. package/dist/cjs/src/novadax.js +39 -3
  206. package/dist/cjs/src/oceanex.js +5 -3
  207. package/dist/cjs/src/okcoin.js +5 -3
  208. package/dist/cjs/src/okx.js +5 -3
  209. package/dist/cjs/src/okxus.js +5 -3
  210. package/dist/cjs/src/onetrading.js +38 -3
  211. package/dist/cjs/src/oxfun.js +5 -3
  212. package/dist/cjs/src/p2b.js +37 -3
  213. package/dist/cjs/src/paradex.js +6 -3
  214. package/dist/cjs/src/paymium.js +5 -3
  215. package/dist/cjs/src/phemex.js +4 -2
  216. package/dist/cjs/src/poloniex.js +5 -3
  217. package/dist/cjs/src/pro/alpaca.js +5 -3
  218. package/dist/cjs/src/pro/apex.js +5 -3
  219. package/dist/cjs/src/pro/ascendex.js +5 -3
  220. package/dist/cjs/src/pro/bequant.js +6 -4
  221. package/dist/cjs/src/pro/binance.js +8 -8
  222. package/dist/cjs/src/pro/binancecoinm.js +6 -4
  223. package/dist/cjs/src/pro/binanceus.js +6 -4
  224. package/dist/cjs/src/pro/binanceusdm.js +5 -3
  225. package/dist/cjs/src/pro/bingx.js +5 -3
  226. package/dist/cjs/src/pro/bitfinex.js +5 -3
  227. package/dist/cjs/src/pro/bitget.js +6 -4
  228. package/dist/cjs/src/pro/bithumb.js +5 -3
  229. package/dist/cjs/src/pro/bitmart.js +5 -3
  230. package/dist/cjs/src/pro/bitmex.js +6 -4
  231. package/dist/cjs/src/pro/bitopro.js +4 -2
  232. package/dist/cjs/src/pro/bitrue.js +5 -3
  233. package/dist/cjs/src/pro/bitstamp.js +6 -4
  234. package/dist/cjs/src/pro/bittrade.js +4 -2
  235. package/dist/cjs/src/pro/bitvavo.js +8 -4
  236. package/dist/cjs/src/pro/blockchaincom.js +5 -3
  237. package/dist/cjs/src/pro/blofin.js +5 -3
  238. package/dist/cjs/src/pro/bybit.js +6 -3
  239. package/dist/cjs/src/pro/cex.js +6 -3
  240. package/dist/cjs/src/pro/coinbase.js +5 -3
  241. package/dist/cjs/src/pro/coinbaseadvanced.js +5 -3
  242. package/dist/cjs/src/pro/coinbaseexchange.js +7 -5
  243. package/dist/cjs/src/pro/coinbaseinternational.js +5 -3
  244. package/dist/cjs/src/pro/coincatch.js +5 -3
  245. package/dist/cjs/src/pro/coincheck.js +5 -3
  246. package/dist/cjs/src/pro/coinex.js +6 -4
  247. package/dist/cjs/src/pro/coinone.js +5 -3
  248. package/dist/cjs/src/pro/cryptocom.js +5 -3
  249. package/dist/cjs/src/pro/defx.js +5 -3
  250. package/dist/cjs/src/pro/deribit.js +5 -3
  251. package/dist/cjs/src/pro/derive.js +4 -2
  252. package/dist/cjs/src/pro/exmo.js +5 -3
  253. package/dist/cjs/src/pro/gate.js +6 -4
  254. package/dist/cjs/src/pro/gateio.js +5 -3
  255. package/dist/cjs/src/pro/gemini.js +5 -3
  256. package/dist/cjs/src/pro/hashkey.js +5 -3
  257. package/dist/cjs/src/pro/hitbtc.js +5 -3
  258. package/dist/cjs/src/pro/hollaex.js +5 -3
  259. package/dist/cjs/src/pro/htx.js +6 -4
  260. package/dist/cjs/src/pro/huobi.js +5 -3
  261. package/dist/cjs/src/pro/hyperliquid.js +108 -15
  262. package/dist/cjs/src/pro/independentreserve.js +5 -3
  263. package/dist/cjs/src/pro/kraken.js +5 -3
  264. package/dist/cjs/src/pro/krakenfutures.js +7 -4
  265. package/dist/cjs/src/pro/kucoin.js +7 -4
  266. package/dist/cjs/src/pro/kucoinfutures.js +7 -4
  267. package/dist/cjs/src/pro/lbank.js +4 -3
  268. package/dist/cjs/src/pro/luno.js +5 -3
  269. package/dist/cjs/src/pro/mexc.js +343 -160
  270. package/dist/cjs/src/pro/modetrade.js +4 -2
  271. package/dist/cjs/src/pro/myokx.js +5 -3
  272. package/dist/cjs/src/pro/ndax.js +5 -3
  273. package/dist/cjs/src/pro/okcoin.js +5 -3
  274. package/dist/cjs/src/pro/okx.js +10 -7
  275. package/dist/cjs/src/pro/okxus.js +5 -3
  276. package/dist/cjs/src/pro/onetrading.js +5 -3
  277. package/dist/cjs/src/pro/oxfun.js +6 -4
  278. package/dist/cjs/src/pro/p2b.js +5 -3
  279. package/dist/cjs/src/pro/paradex.js +5 -3
  280. package/dist/cjs/src/pro/phemex.js +5 -3
  281. package/dist/cjs/src/pro/poloniex.js +5 -3
  282. package/dist/cjs/src/pro/probit.js +5 -3
  283. package/dist/cjs/src/pro/tradeogre.js +5 -3
  284. package/dist/cjs/src/pro/upbit.js +5 -3
  285. package/dist/cjs/src/pro/vertex.js +4 -2
  286. package/dist/cjs/src/pro/whitebit.js +5 -3
  287. package/dist/cjs/src/pro/woo.js +4 -2
  288. package/dist/cjs/src/pro/woofipro.js +4 -2
  289. package/dist/cjs/src/pro/xt.js +5 -3
  290. package/dist/cjs/src/probit.js +40 -3
  291. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +7180 -0
  292. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -7
  293. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  294. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +2 -8
  295. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  296. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  297. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  298. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  299. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  300. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  301. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  302. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  303. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  304. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  305. package/dist/cjs/src/static_dependencies/ethers/fragments.js +2 -8
  306. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +2 -8
  307. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  308. package/dist/cjs/src/static_dependencies/ethers/interface.js +2 -8
  309. package/dist/cjs/src/static_dependencies/ethers/typed.js +2 -8
  310. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  311. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  312. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  313. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +2 -8
  314. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +2 -8
  315. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  316. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  317. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  318. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  319. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  320. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  321. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  323. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  324. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  325. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  326. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  327. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  328. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  329. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  330. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  331. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  332. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  333. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  334. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  335. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  337. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  338. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  339. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  340. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  341. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  342. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  343. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  344. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  345. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  346. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  347. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  348. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  349. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  350. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  351. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  352. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  353. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  354. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  355. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  356. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  357. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  358. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  359. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  360. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  361. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  362. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  363. package/dist/cjs/src/static_dependencies/node-fetch/index.js +14 -8
  364. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  365. package/dist/cjs/src/static_dependencies/node-fetch/response.js +8 -2
  366. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  367. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  368. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  369. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  370. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  371. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  372. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  373. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  374. package/dist/cjs/src/static_dependencies/qs/index.cjs.js +3 -1
  375. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  376. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  377. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  378. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  379. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  380. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  381. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  382. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  383. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +2 -6
  384. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  385. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  386. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  390. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  391. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  392. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +3 -2
  393. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +8 -8
  394. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  395. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  396. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  397. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +4 -3
  398. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -2
  399. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +4 -3
  400. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +4 -2
  401. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +32 -27
  402. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  403. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  404. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  405. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  406. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  407. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  408. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +3 -3
  409. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  410. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  411. package/dist/cjs/src/timex.js +4 -3
  412. package/dist/cjs/src/tokocrypto.js +5 -3
  413. package/dist/cjs/src/tradeogre.js +5 -3
  414. package/dist/cjs/src/upbit.js +5 -3
  415. package/dist/cjs/src/vertex.js +5 -3
  416. package/dist/cjs/src/wavesexchange.js +5 -3
  417. package/dist/cjs/src/whitebit.js +5 -3
  418. package/dist/cjs/src/woo.js +5 -3
  419. package/dist/cjs/src/woofipro.js +101 -3
  420. package/dist/cjs/src/xt.js +5 -3
  421. package/dist/cjs/src/yobit.js +5 -3
  422. package/dist/cjs/src/zaif.js +5 -3
  423. package/dist/cjs/src/zonda.js +5 -3
  424. package/js/ccxt.d.ts +5 -2
  425. package/js/ccxt.js +4 -8
  426. package/js/src/abstract/alpaca.js +0 -6
  427. package/js/src/abstract/apex.js +0 -6
  428. package/js/src/abstract/ascendex.js +0 -6
  429. package/js/src/abstract/bequant.js +0 -6
  430. package/js/src/abstract/bigone.js +0 -6
  431. package/js/src/abstract/binance.js +0 -6
  432. package/js/src/abstract/binancecoinm.js +0 -6
  433. package/js/src/abstract/binanceus.js +0 -6
  434. package/js/src/abstract/binanceusdm.js +0 -6
  435. package/js/src/abstract/bingx.d.ts +1 -0
  436. package/js/src/abstract/bingx.js +0 -6
  437. package/js/src/abstract/bit2c.js +0 -6
  438. package/js/src/abstract/bitbank.js +0 -6
  439. package/js/src/abstract/bitbns.js +0 -6
  440. package/js/src/abstract/bitfinex.js +0 -6
  441. package/js/src/abstract/bitflyer.js +0 -6
  442. package/js/src/abstract/bitget.d.ts +6 -0
  443. package/js/src/abstract/bitget.js +0 -6
  444. package/js/src/abstract/bithumb.js +0 -6
  445. package/js/src/abstract/bitmart.js +0 -6
  446. package/js/src/abstract/bitmex.js +0 -6
  447. package/js/src/abstract/bitopro.js +0 -6
  448. package/js/src/abstract/bitrue.js +0 -6
  449. package/js/src/abstract/bitso.js +0 -6
  450. package/js/src/abstract/bitstamp.js +0 -6
  451. package/js/src/abstract/bitteam.js +0 -6
  452. package/js/src/abstract/bittrade.js +0 -6
  453. package/js/src/abstract/bitvavo.js +0 -6
  454. package/js/src/abstract/blockchaincom.js +0 -6
  455. package/js/src/abstract/blofin.js +0 -6
  456. package/js/src/abstract/btcalpha.js +0 -6
  457. package/js/src/abstract/btcbox.js +0 -6
  458. package/js/src/abstract/btcmarkets.js +0 -6
  459. package/js/src/abstract/btcturk.js +0 -6
  460. package/js/src/abstract/bybit.js +0 -6
  461. package/js/src/abstract/cex.js +0 -6
  462. package/js/src/abstract/coinbase.js +0 -6
  463. package/js/src/abstract/coinbaseadvanced.js +0 -6
  464. package/js/src/abstract/coinbaseexchange.js +0 -6
  465. package/js/src/abstract/coinbaseinternational.js +0 -6
  466. package/js/src/abstract/coincatch.js +0 -6
  467. package/js/src/abstract/coincheck.js +0 -6
  468. package/js/src/abstract/coinex.js +0 -6
  469. package/js/src/abstract/coinmate.js +0 -6
  470. package/js/src/abstract/coinmetro.js +0 -6
  471. package/js/src/abstract/coinone.js +0 -6
  472. package/js/src/abstract/coinsph.js +0 -6
  473. package/js/src/abstract/coinspot.js +0 -6
  474. package/js/src/abstract/cryptocom.js +0 -6
  475. package/js/src/abstract/cryptomus.js +0 -6
  476. package/js/src/abstract/defx.js +0 -6
  477. package/js/src/abstract/delta.js +0 -6
  478. package/js/src/abstract/deribit.js +0 -6
  479. package/js/src/abstract/derive.js +0 -6
  480. package/js/src/abstract/digifinex.js +0 -6
  481. package/js/src/abstract/ellipx.js +0 -6
  482. package/js/src/abstract/exmo.js +0 -6
  483. package/js/src/abstract/fmfwio.js +0 -6
  484. package/js/src/abstract/foxbit.js +0 -6
  485. package/js/src/abstract/gate.js +0 -6
  486. package/js/src/abstract/gateio.js +0 -6
  487. package/js/src/abstract/gemini.js +0 -6
  488. package/js/src/abstract/hashkey.js +0 -6
  489. package/js/src/abstract/hibachi.d.ts +29 -0
  490. package/js/src/abstract/hibachi.js +5 -0
  491. package/js/src/abstract/hitbtc.js +0 -6
  492. package/js/src/abstract/hollaex.js +0 -6
  493. package/js/src/abstract/htx.js +0 -6
  494. package/js/src/abstract/huobi.js +0 -6
  495. package/js/src/abstract/hyperliquid.js +0 -6
  496. package/js/src/abstract/independentreserve.js +0 -6
  497. package/js/src/abstract/indodax.js +0 -6
  498. package/js/src/abstract/kraken.js +0 -6
  499. package/js/src/abstract/krakenfutures.js +0 -6
  500. package/js/src/abstract/kucoin.js +0 -6
  501. package/js/src/abstract/kucoinfutures.js +0 -6
  502. package/js/src/abstract/latoken.js +0 -6
  503. package/js/src/abstract/lbank.js +0 -6
  504. package/js/src/abstract/luno.js +0 -6
  505. package/js/src/abstract/mercado.js +0 -6
  506. package/js/src/abstract/mexc.js +0 -6
  507. package/js/src/abstract/modetrade.js +0 -6
  508. package/js/src/abstract/myokx.js +0 -6
  509. package/js/src/abstract/ndax.js +0 -6
  510. package/js/src/abstract/novadax.js +0 -6
  511. package/js/src/abstract/oceanex.js +0 -6
  512. package/js/src/abstract/okcoin.js +0 -6
  513. package/js/src/abstract/okx.js +0 -6
  514. package/js/src/abstract/okxus.js +0 -6
  515. package/js/src/abstract/onetrading.js +0 -6
  516. package/js/src/abstract/oxfun.js +0 -6
  517. package/js/src/abstract/p2b.js +0 -6
  518. package/js/src/abstract/paradex.js +0 -6
  519. package/js/src/abstract/paymium.js +0 -6
  520. package/js/src/abstract/phemex.js +0 -6
  521. package/js/src/abstract/poloniex.js +0 -6
  522. package/js/src/abstract/probit.js +0 -6
  523. package/js/src/abstract/timex.js +0 -6
  524. package/js/src/abstract/tokocrypto.js +0 -6
  525. package/js/src/abstract/tradeogre.js +0 -6
  526. package/js/src/abstract/upbit.js +0 -6
  527. package/js/src/abstract/vertex.js +0 -6
  528. package/js/src/abstract/wavesexchange.js +0 -6
  529. package/js/src/abstract/whitebit.js +0 -6
  530. package/js/src/abstract/woo.js +0 -6
  531. package/js/src/abstract/woofipro.js +0 -6
  532. package/js/src/abstract/xt.js +0 -6
  533. package/js/src/abstract/yobit.js +0 -6
  534. package/js/src/abstract/zaif.js +0 -6
  535. package/js/src/abstract/zonda.js +0 -6
  536. package/js/src/alpaca.d.ts +1 -1
  537. package/js/src/alpaca.js +0 -6
  538. package/js/src/apex.d.ts +1 -1
  539. package/js/src/apex.js +0 -6
  540. package/js/src/ascendex.d.ts +1 -1
  541. package/js/src/ascendex.js +0 -6
  542. package/js/src/base/Exchange.d.ts +9 -7
  543. package/js/src/base/Exchange.js +50 -16
  544. package/js/src/base/Precise.js +0 -6
  545. package/js/src/base/errorHierarchy.js +0 -6
  546. package/js/src/base/errors.js +0 -6
  547. package/js/src/base/functions/crypto.js +0 -6
  548. package/js/src/base/functions/encode.js +0 -6
  549. package/js/src/base/functions/generic.js +0 -6
  550. package/js/src/base/functions/misc.js +0 -6
  551. package/js/src/base/functions/number.js +0 -6
  552. package/js/src/base/functions/platform.js +0 -6
  553. package/js/src/base/functions/rsa.js +0 -6
  554. package/js/src/base/functions/string.js +0 -6
  555. package/js/src/base/functions/throttle.js +0 -6
  556. package/js/src/base/functions/time.js +0 -6
  557. package/js/src/base/functions/totp.js +0 -6
  558. package/js/src/base/functions/type.js +0 -6
  559. package/js/src/base/functions.js +0 -6
  560. package/js/src/base/types.d.ts +2 -1
  561. package/js/src/base/types.js +0 -6
  562. package/js/src/base/ws/Cache.js +0 -6
  563. package/js/src/base/ws/Client.d.ts +1 -0
  564. package/js/src/base/ws/Client.js +5 -7
  565. package/js/src/base/ws/Future.js +0 -6
  566. package/js/src/base/ws/OrderBook.js +0 -6
  567. package/js/src/base/ws/OrderBookSide.js +0 -6
  568. package/js/src/base/ws/WsClient.js +0 -6
  569. package/js/src/base/ws/functions.js +0 -6
  570. package/js/src/bequant.js +0 -6
  571. package/js/src/bigone.d.ts +1 -1
  572. package/js/src/bigone.js +0 -6
  573. package/js/src/binance.d.ts +2 -2
  574. package/js/src/binance.js +9 -12
  575. package/js/src/binancecoinm.js +0 -6
  576. package/js/src/binanceus.js +0 -6
  577. package/js/src/binanceusdm.js +0 -6
  578. package/js/src/bingx.d.ts +3 -2
  579. package/js/src/bingx.js +32 -8
  580. package/js/src/bit2c.js +0 -6
  581. package/js/src/bitbank.d.ts +1 -1
  582. package/js/src/bitbank.js +0 -6
  583. package/js/src/bitbns.js +0 -6
  584. package/js/src/bitfinex.d.ts +1 -1
  585. package/js/src/bitfinex.js +3 -6
  586. package/js/src/bitflyer.d.ts +1 -1
  587. package/js/src/bitflyer.js +0 -6
  588. package/js/src/bitget.d.ts +77 -9
  589. package/js/src/bitget.js +2172 -555
  590. package/js/src/bithumb.d.ts +1 -1
  591. package/js/src/bithumb.js +0 -6
  592. package/js/src/bitmart.d.ts +2 -2
  593. package/js/src/bitmart.js +0 -6
  594. package/js/src/bitmex.d.ts +2 -2
  595. package/js/src/bitmex.js +1 -6
  596. package/js/src/bitopro.d.ts +1 -1
  597. package/js/src/bitopro.js +0 -6
  598. package/js/src/bitrue.d.ts +2 -2
  599. package/js/src/bitrue.js +0 -6
  600. package/js/src/bitso.d.ts +1 -1
  601. package/js/src/bitso.js +0 -6
  602. package/js/src/bitstamp.d.ts +1 -1
  603. package/js/src/bitstamp.js +0 -6
  604. package/js/src/bitteam.js +0 -6
  605. package/js/src/bittrade.d.ts +1 -1
  606. package/js/src/bittrade.js +0 -6
  607. package/js/src/bitvavo.d.ts +1 -1
  608. package/js/src/bitvavo.js +0 -6
  609. package/js/src/blockchaincom.d.ts +1 -1
  610. package/js/src/blockchaincom.js +0 -6
  611. package/js/src/blofin.d.ts +1 -1
  612. package/js/src/blofin.js +0 -6
  613. package/js/src/btcalpha.js +0 -6
  614. package/js/src/btcbox.js +0 -6
  615. package/js/src/btcmarkets.d.ts +1 -1
  616. package/js/src/btcmarkets.js +0 -6
  617. package/js/src/btcturk.js +0 -6
  618. package/js/src/bybit.d.ts +2 -2
  619. package/js/src/bybit.js +6 -7
  620. package/js/src/cex.js +0 -6
  621. package/js/src/coinbase.d.ts +1 -1
  622. package/js/src/coinbase.js +0 -6
  623. package/js/src/coinbaseadvanced.js +0 -6
  624. package/js/src/coinbaseexchange.d.ts +1 -1
  625. package/js/src/coinbaseexchange.js +0 -6
  626. package/js/src/coinbaseinternational.d.ts +1 -1
  627. package/js/src/coinbaseinternational.js +0 -6
  628. package/js/src/coincatch.d.ts +2 -2
  629. package/js/src/coincatch.js +0 -6
  630. package/js/src/coincheck.js +0 -6
  631. package/js/src/coinex.d.ts +13 -3
  632. package/js/src/coinex.js +68 -10
  633. package/js/src/coinmate.d.ts +1 -1
  634. package/js/src/coinmate.js +0 -6
  635. package/js/src/coinmetro.js +0 -6
  636. package/js/src/coinone.js +0 -6
  637. package/js/src/coinsph.d.ts +1 -1
  638. package/js/src/coinsph.js +0 -6
  639. package/js/src/coinspot.js +0 -6
  640. package/js/src/cryptocom.d.ts +1 -1
  641. package/js/src/cryptocom.js +1 -7
  642. package/js/src/cryptomus.js +0 -6
  643. package/js/src/defx.d.ts +2 -2
  644. package/js/src/defx.js +0 -6
  645. package/js/src/delta.d.ts +1 -1
  646. package/js/src/delta.js +0 -6
  647. package/js/src/deribit.d.ts +1 -1
  648. package/js/src/deribit.js +0 -6
  649. package/js/src/derive.js +0 -6
  650. package/js/src/digifinex.d.ts +2 -2
  651. package/js/src/digifinex.js +0 -6
  652. package/js/src/ellipx.d.ts +1 -1
  653. package/js/src/ellipx.js +0 -6
  654. package/js/src/exmo.d.ts +1 -1
  655. package/js/src/exmo.js +0 -6
  656. package/js/src/fmfwio.js +0 -6
  657. package/js/src/foxbit.d.ts +1 -1
  658. package/js/src/foxbit.js +3 -9
  659. package/js/src/gate.d.ts +2 -2
  660. package/js/src/gate.js +22 -8
  661. package/js/src/gateio.js +0 -6
  662. package/js/src/gemini.d.ts +1 -1
  663. package/js/src/gemini.js +0 -6
  664. package/js/src/hashkey.d.ts +3 -3
  665. package/js/src/hashkey.js +0 -6
  666. package/js/src/hibachi.d.ts +346 -0
  667. package/js/src/hibachi.js +2131 -0
  668. package/js/src/hitbtc.d.ts +2 -2
  669. package/js/src/hitbtc.js +0 -6
  670. package/js/src/hollaex.d.ts +1 -1
  671. package/js/src/hollaex.js +0 -6
  672. package/js/src/htx.d.ts +3 -3
  673. package/js/src/htx.js +1 -6
  674. package/js/src/huobi.js +0 -6
  675. package/js/src/hyperliquid.d.ts +12 -2
  676. package/js/src/hyperliquid.js +79 -34
  677. package/js/src/independentreserve.d.ts +1 -1
  678. package/js/src/independentreserve.js +0 -6
  679. package/js/src/indodax.d.ts +1 -1
  680. package/js/src/indodax.js +0 -6
  681. package/js/src/kraken.d.ts +1 -1
  682. package/js/src/kraken.js +0 -6
  683. package/js/src/krakenfutures.d.ts +1 -1
  684. package/js/src/krakenfutures.js +1 -6
  685. package/js/src/kucoin.d.ts +2 -2
  686. package/js/src/kucoin.js +0 -6
  687. package/js/src/kucoinfutures.d.ts +3 -2
  688. package/js/src/kucoinfutures.js +1 -6
  689. package/js/src/latoken.js +0 -6
  690. package/js/src/lbank.d.ts +1 -1
  691. package/js/src/lbank.js +1 -7
  692. package/js/src/luno.js +0 -6
  693. package/js/src/mercado.d.ts +1 -1
  694. package/js/src/mercado.js +0 -6
  695. package/js/src/mexc.d.ts +2 -2
  696. package/js/src/mexc.js +7 -6
  697. package/js/src/modetrade.d.ts +26 -3
  698. package/js/src/modetrade.js +96 -6
  699. package/js/src/myokx.js +0 -6
  700. package/js/src/ndax.d.ts +1 -1
  701. package/js/src/ndax.js +0 -6
  702. package/js/src/novadax.d.ts +1 -1
  703. package/js/src/novadax.js +34 -6
  704. package/js/src/oceanex.js +0 -6
  705. package/js/src/okcoin.d.ts +1 -1
  706. package/js/src/okcoin.js +0 -6
  707. package/js/src/okx.d.ts +2 -2
  708. package/js/src/okx.js +0 -6
  709. package/js/src/okxus.js +0 -6
  710. package/js/src/onetrading.js +33 -6
  711. package/js/src/oxfun.d.ts +1 -1
  712. package/js/src/oxfun.js +0 -6
  713. package/js/src/p2b.js +32 -6
  714. package/js/src/paradex.d.ts +1 -1
  715. package/js/src/paradex.js +1 -6
  716. package/js/src/paymium.js +0 -6
  717. package/js/src/phemex.d.ts +2 -2
  718. package/js/src/phemex.js +0 -6
  719. package/js/src/poloniex.d.ts +2 -2
  720. package/js/src/poloniex.js +0 -6
  721. package/js/src/pro/alpaca.d.ts +2 -2
  722. package/js/src/pro/alpaca.js +0 -6
  723. package/js/src/pro/apex.d.ts +2 -2
  724. package/js/src/pro/apex.js +0 -6
  725. package/js/src/pro/ascendex.d.ts +2 -2
  726. package/js/src/pro/ascendex.js +0 -6
  727. package/js/src/pro/bequant.js +0 -6
  728. package/js/src/pro/binance.d.ts +2 -2
  729. package/js/src/pro/binance.js +4 -12
  730. package/js/src/pro/binancecoinm.js +0 -6
  731. package/js/src/pro/binanceus.js +0 -6
  732. package/js/src/pro/binanceusdm.js +0 -6
  733. package/js/src/pro/bingx.js +0 -6
  734. package/js/src/pro/bitfinex.js +0 -6
  735. package/js/src/pro/bitget.d.ts +2 -2
  736. package/js/src/pro/bitget.js +1 -7
  737. package/js/src/pro/bithumb.d.ts +2 -2
  738. package/js/src/pro/bithumb.js +0 -6
  739. package/js/src/pro/bitmart.d.ts +2 -2
  740. package/js/src/pro/bitmart.js +0 -6
  741. package/js/src/pro/bitmex.d.ts +3 -3
  742. package/js/src/pro/bitmex.js +1 -7
  743. package/js/src/pro/bitopro.js +0 -6
  744. package/js/src/pro/bitrue.js +0 -6
  745. package/js/src/pro/bitstamp.d.ts +2 -2
  746. package/js/src/pro/bitstamp.js +1 -7
  747. package/js/src/pro/bittrade.d.ts +2 -2
  748. package/js/src/pro/bittrade.js +0 -6
  749. package/js/src/pro/bitvavo.d.ts +2 -2
  750. package/js/src/pro/bitvavo.js +3 -7
  751. package/js/src/pro/blockchaincom.js +0 -6
  752. package/js/src/pro/blofin.js +0 -6
  753. package/js/src/pro/bybit.d.ts +4 -4
  754. package/js/src/pro/bybit.js +1 -6
  755. package/js/src/pro/cex.d.ts +2 -2
  756. package/js/src/pro/cex.js +1 -6
  757. package/js/src/pro/coinbase.js +0 -6
  758. package/js/src/pro/coinbaseadvanced.js +0 -6
  759. package/js/src/pro/coinbaseexchange.d.ts +4 -4
  760. package/js/src/pro/coinbaseexchange.js +2 -8
  761. package/js/src/pro/coinbaseinternational.d.ts +2 -2
  762. package/js/src/pro/coinbaseinternational.js +0 -6
  763. package/js/src/pro/coincatch.d.ts +2 -2
  764. package/js/src/pro/coincatch.js +0 -6
  765. package/js/src/pro/coincheck.js +0 -6
  766. package/js/src/pro/coinex.js +1 -7
  767. package/js/src/pro/coinone.d.ts +2 -2
  768. package/js/src/pro/coinone.js +0 -6
  769. package/js/src/pro/cryptocom.d.ts +2 -2
  770. package/js/src/pro/cryptocom.js +0 -6
  771. package/js/src/pro/defx.js +0 -6
  772. package/js/src/pro/deribit.js +0 -6
  773. package/js/src/pro/derive.d.ts +2 -2
  774. package/js/src/pro/derive.js +0 -6
  775. package/js/src/pro/exmo.js +0 -6
  776. package/js/src/pro/gate.d.ts +3 -3
  777. package/js/src/pro/gate.js +1 -7
  778. package/js/src/pro/gateio.js +0 -6
  779. package/js/src/pro/gemini.js +0 -6
  780. package/js/src/pro/hashkey.js +0 -6
  781. package/js/src/pro/hitbtc.js +0 -6
  782. package/js/src/pro/hollaex.d.ts +2 -2
  783. package/js/src/pro/hollaex.js +0 -6
  784. package/js/src/pro/htx.d.ts +2 -2
  785. package/js/src/pro/htx.js +1 -7
  786. package/js/src/pro/huobi.js +0 -6
  787. package/js/src/pro/hyperliquid.d.ts +28 -2
  788. package/js/src/pro/hyperliquid.js +103 -18
  789. package/js/src/pro/independentreserve.js +0 -6
  790. package/js/src/pro/kraken.d.ts +2 -2
  791. package/js/src/pro/kraken.js +0 -6
  792. package/js/src/pro/krakenfutures.d.ts +3 -3
  793. package/js/src/pro/krakenfutures.js +2 -7
  794. package/js/src/pro/kucoin.d.ts +2 -2
  795. package/js/src/pro/kucoin.js +2 -7
  796. package/js/src/pro/kucoinfutures.d.ts +2 -2
  797. package/js/src/pro/kucoinfutures.js +2 -7
  798. package/js/src/pro/lbank.js +0 -6
  799. package/js/src/pro/luno.js +0 -6
  800. package/js/src/pro/mexc.d.ts +9 -6
  801. package/js/src/pro/mexc.js +338 -163
  802. package/js/src/pro/modetrade.d.ts +2 -2
  803. package/js/src/pro/modetrade.js +0 -6
  804. package/js/src/pro/myokx.js +0 -6
  805. package/js/src/pro/ndax.js +0 -6
  806. package/js/src/pro/okcoin.d.ts +2 -2
  807. package/js/src/pro/okcoin.js +0 -6
  808. package/js/src/pro/okx.d.ts +4 -4
  809. package/js/src/pro/okx.js +5 -10
  810. package/js/src/pro/okxus.js +0 -6
  811. package/js/src/pro/onetrading.d.ts +2 -2
  812. package/js/src/pro/onetrading.js +0 -6
  813. package/js/src/pro/oxfun.js +1 -7
  814. package/js/src/pro/p2b.d.ts +2 -2
  815. package/js/src/pro/p2b.js +0 -6
  816. package/js/src/pro/paradex.d.ts +2 -2
  817. package/js/src/pro/paradex.js +0 -6
  818. package/js/src/pro/phemex.js +0 -6
  819. package/js/src/pro/poloniex.d.ts +2 -2
  820. package/js/src/pro/poloniex.js +0 -6
  821. package/js/src/pro/probit.d.ts +2 -2
  822. package/js/src/pro/probit.js +0 -6
  823. package/js/src/pro/tradeogre.js +0 -6
  824. package/js/src/pro/upbit.js +0 -6
  825. package/js/src/pro/vertex.d.ts +2 -2
  826. package/js/src/pro/vertex.js +0 -6
  827. package/js/src/pro/whitebit.d.ts +2 -2
  828. package/js/src/pro/whitebit.js +0 -6
  829. package/js/src/pro/woo.d.ts +2 -2
  830. package/js/src/pro/woo.js +0 -6
  831. package/js/src/pro/woofipro.d.ts +2 -2
  832. package/js/src/pro/woofipro.js +0 -6
  833. package/js/src/pro/xt.js +0 -6
  834. package/js/src/probit.d.ts +1 -1
  835. package/js/src/probit.js +35 -6
  836. package/js/src/protobuf/mexc/compiled.cjs +7180 -0
  837. package/js/src/protobuf/mexc/compiled.d.cts +2 -0
  838. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  839. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  840. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  841. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  842. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  843. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  844. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  845. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  846. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  847. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  848. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  849. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  850. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  851. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  852. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  853. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  854. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  855. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  856. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  857. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  858. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  859. package/js/src/static_dependencies/ethers/index.js +0 -6
  860. package/js/src/static_dependencies/ethers/interface.js +0 -6
  861. package/js/src/static_dependencies/ethers/typed.js +0 -6
  862. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  863. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  864. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  865. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  866. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  867. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  868. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  869. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  870. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  871. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  872. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  873. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  874. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  875. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  876. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  877. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  878. package/js/src/static_dependencies/fflake/browser.js +0 -6
  879. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  880. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  881. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  882. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  883. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  884. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  885. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  886. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  887. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  888. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  889. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  890. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  891. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  892. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  893. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  894. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  895. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  896. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  897. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  898. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  899. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  900. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  901. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  902. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  903. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  904. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  905. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  906. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  907. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  908. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  909. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  910. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  911. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  912. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  913. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  914. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  915. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  916. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  917. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  918. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  919. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  920. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  921. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  922. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  923. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  924. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  925. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  926. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  927. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  928. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  929. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  930. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  931. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  932. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  933. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  934. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  935. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  936. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  937. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  938. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  939. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  940. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  941. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  942. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  943. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  944. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  945. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  946. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  947. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  948. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  949. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  950. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  951. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  952. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  953. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  954. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  955. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  956. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  957. package/js/src/static_dependencies/qs/index.cjs +0 -6
  958. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  959. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  960. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  961. package/js/src/static_dependencies/scure-base/index.js +0 -6
  962. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  963. package/js/src/static_dependencies/starknet/constants.js +0 -6
  964. package/js/src/static_dependencies/starknet/index.js +0 -6
  965. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  966. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  967. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  968. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  969. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  970. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  971. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  972. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  973. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  974. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  975. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  976. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  977. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  978. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  979. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  980. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  981. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  982. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  983. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  984. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  985. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  986. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  987. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  988. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  989. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  990. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  991. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  992. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  993. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  994. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  995. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  996. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  997. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  998. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  999. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  1000. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  1001. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  1002. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  1003. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  1004. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  1005. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  1006. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  1007. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  1008. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  1009. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  1010. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  1011. package/js/src/timex.js +0 -6
  1012. package/js/src/tokocrypto.d.ts +1 -1
  1013. package/js/src/tokocrypto.js +0 -6
  1014. package/js/src/tradeogre.js +0 -6
  1015. package/js/src/upbit.d.ts +1 -1
  1016. package/js/src/upbit.js +0 -6
  1017. package/js/src/vertex.d.ts +1 -1
  1018. package/js/src/vertex.js +0 -6
  1019. package/js/src/wavesexchange.d.ts +1 -1
  1020. package/js/src/wavesexchange.js +0 -6
  1021. package/js/src/whitebit.d.ts +2 -2
  1022. package/js/src/whitebit.js +0 -6
  1023. package/js/src/woo.d.ts +4 -4
  1024. package/js/src/woo.js +0 -6
  1025. package/js/src/woofipro.d.ts +26 -3
  1026. package/js/src/woofipro.js +96 -6
  1027. package/js/src/xt.d.ts +3 -3
  1028. package/js/src/xt.js +0 -6
  1029. package/js/src/yobit.d.ts +1 -1
  1030. package/js/src/yobit.js +0 -6
  1031. package/js/src/zaif.d.ts +1 -1
  1032. package/js/src/zaif.js +0 -6
  1033. package/js/src/zonda.d.ts +1 -1
  1034. package/js/src/zonda.js +0 -6
  1035. package/package.json +4 -3
@@ -0,0 +1,2131 @@
1
+ // ---------------------------------------------------------------------------
2
+ import Exchange from './abstract/hibachi.js';
3
+ import { TICK_SIZE } from './base/functions/number.js';
4
+ import { ecdsa } from './base/functions/crypto.js';
5
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
6
+ import { secp256k1 } from './static_dependencies/noble-curves/secp256k1.js';
7
+ import { Precise } from './base/Precise.js';
8
+ import { BadRequest, ExchangeError, OrderNotFound } from './base/errors.js';
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * @class hibachi
12
+ * @augments Exchange
13
+ */
14
+ export default class hibachi extends Exchange {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'id': 'hibachi',
18
+ 'name': 'Hibachi',
19
+ 'countries': ['US'],
20
+ 'rateLimit': 100,
21
+ 'userAgent': this.userAgents['chrome'],
22
+ 'certified': false,
23
+ 'pro': false,
24
+ 'dex': true,
25
+ 'has': {
26
+ 'CORS': undefined,
27
+ 'spot': false,
28
+ 'margin': false,
29
+ 'swap': true,
30
+ 'future': false,
31
+ 'option': false,
32
+ 'addMargin': false,
33
+ 'cancelAllOrders': true,
34
+ 'cancelOrder': true,
35
+ 'cancelOrders': true,
36
+ 'cancelWithdraw': false,
37
+ 'closeAllPositions': false,
38
+ 'closePosition': false,
39
+ 'createConvertTrade': false,
40
+ 'createDepositAddress': false,
41
+ 'createMarketBuyOrderWithCost': false,
42
+ 'createMarketOrder': false,
43
+ 'createMarketOrderWithCost': false,
44
+ 'createMarketSellOrderWithCost': false,
45
+ 'createOrder': true,
46
+ 'createOrders': true,
47
+ 'createOrderWithTakeProfitAndStopLoss': false,
48
+ 'createReduceOnlyOrder': false,
49
+ 'createStopLimitOrder': false,
50
+ 'createStopLossOrder': false,
51
+ 'createStopMarketOrder': false,
52
+ 'createStopOrder': false,
53
+ 'createTakeProfitOrder': false,
54
+ 'createTrailingAmountOrder': false,
55
+ 'createTrailingPercentOrder': false,
56
+ 'createTriggerOrder': false,
57
+ 'editOrder': true,
58
+ 'editOrders': true,
59
+ 'fetchAccounts': false,
60
+ 'fetchBalance': true,
61
+ 'fetchCanceledOrders': false,
62
+ 'fetchClosedOrder': false,
63
+ 'fetchClosedOrders': false,
64
+ 'fetchConvertCurrencies': false,
65
+ 'fetchConvertQuote': false,
66
+ 'fetchCurrencies': true,
67
+ 'fetchDepositAddress': true,
68
+ 'fetchDeposits': true,
69
+ 'fetchDepositsWithdrawals': false,
70
+ 'fetchFundingHistory': false,
71
+ 'fetchFundingInterval': false,
72
+ 'fetchFundingIntervals': false,
73
+ 'fetchFundingRate': true,
74
+ 'fetchFundingRateHistory': true,
75
+ 'fetchFundingRates': false,
76
+ 'fetchIndexOHLCV': false,
77
+ 'fetchLedger': true,
78
+ 'fetchLeverage': false,
79
+ 'fetchMarginAdjustmentHistory': false,
80
+ 'fetchMarginMode': false,
81
+ 'fetchMarkets': true,
82
+ 'fetchMyTrades': true,
83
+ 'fetchOHLCV': true,
84
+ 'fetchOpenInterest': true,
85
+ 'fetchOpenInterestHistory': false,
86
+ 'fetchOpenOrder': false,
87
+ 'fetchOpenOrders': true,
88
+ 'fetchOrder': true,
89
+ 'fetchOrderBook': true,
90
+ 'fetchOrders': false,
91
+ 'fetchOrderTrades': false,
92
+ 'fetchPosition': false,
93
+ 'fetchPositionMode': false,
94
+ 'fetchPositions': true,
95
+ 'fetchPremiumIndexOHLCV': false,
96
+ 'fetchStatus': false,
97
+ 'fetchTicker': true,
98
+ 'fetchTickers': false,
99
+ 'fetchTime': true,
100
+ 'fetchTrades': true,
101
+ 'fetchTradingFee': false,
102
+ 'fetchTradingFees': true,
103
+ 'fetchTradingLimits': false,
104
+ 'fetchTransactions': 'emulated',
105
+ 'fetchTransfers': false,
106
+ 'fetchWithdrawals': true,
107
+ 'reduceMargin': false,
108
+ 'setLeverage': false,
109
+ 'setMargin': false,
110
+ 'setPositionMode': false,
111
+ 'transfer': false,
112
+ 'withdraw': true,
113
+ },
114
+ 'timeframes': {
115
+ '1m': '1min',
116
+ '5m': '5min',
117
+ '15m': '15min',
118
+ '1h': '1h',
119
+ '4h': '4h',
120
+ '1d': '1d',
121
+ '1w': '1w',
122
+ },
123
+ 'urls': {
124
+ 'logo': 'https://github.com/user-attachments/assets/7301bbb1-4f27-4167-8a55-75f74b14e973',
125
+ 'api': {
126
+ 'public': 'https://data-api.hibachi.xyz',
127
+ 'private': 'https://api.hibachi.xyz',
128
+ },
129
+ 'www': 'https://www.hibachi.xyz/',
130
+ 'referral': {
131
+ 'url': 'hibachi.xyz/r/ZBL2YFWIHU',
132
+ },
133
+ },
134
+ 'api': {
135
+ 'public': {
136
+ 'get': {
137
+ 'market/exchange-info': 1,
138
+ 'market/data/trades': 1,
139
+ 'market/data/prices': 1,
140
+ 'market/data/stats': 1,
141
+ 'market/data/klines': 1,
142
+ 'market/data/orderbook': 1,
143
+ 'market/data/open-interest': 1,
144
+ 'market/data/funding-rates': 1,
145
+ 'exchange/utc-timestamp': 1,
146
+ },
147
+ },
148
+ 'private': {
149
+ 'get': {
150
+ 'capital/deposit-info': 1,
151
+ 'capital/history': 1,
152
+ 'trade/account/trading_history': 1,
153
+ 'trade/account/info': 1,
154
+ 'trade/order': 1,
155
+ 'trade/account/trades': 1,
156
+ 'trade/orders': 1,
157
+ },
158
+ 'put': {
159
+ 'trade/order': 1,
160
+ },
161
+ 'delete': {
162
+ 'trade/order': 1,
163
+ 'trade/orders': 1,
164
+ },
165
+ 'post': {
166
+ 'trade/order': 1,
167
+ 'trade/orders': 1,
168
+ 'capital/withdraw': 1,
169
+ },
170
+ },
171
+ },
172
+ 'requiredCredentials': {
173
+ 'apiKey': true,
174
+ 'secret': false,
175
+ 'accountId': true,
176
+ 'privateKey': true,
177
+ },
178
+ 'fees': {
179
+ 'trading': {
180
+ 'tierBased': false,
181
+ 'percentage': true,
182
+ 'maker': this.parseNumber('0.00015'),
183
+ 'taker': this.parseNumber('0.00045'),
184
+ },
185
+ },
186
+ 'options': {},
187
+ 'features': {
188
+ 'default': {
189
+ 'sandbox': false,
190
+ 'createOrder': {
191
+ 'marginMode': false,
192
+ 'triggerPrice': true,
193
+ 'triggerPriceType': undefined,
194
+ 'triggerDirection': undefined,
195
+ 'stopLossPrice': false,
196
+ 'takeProfitPrice': false,
197
+ 'attachedStopLossTakeProfit': undefined,
198
+ 'timeInForce': {
199
+ 'IOC': true,
200
+ 'FOK': false,
201
+ 'PO': true,
202
+ 'GTD': false,
203
+ },
204
+ 'hedged': false,
205
+ 'trailing': false,
206
+ 'leverage': false,
207
+ 'marketBuyByCost': false,
208
+ 'marketBuyRequiresPrice': false,
209
+ 'selfTradePrevention': false,
210
+ 'iceberg': false,
211
+ },
212
+ 'createOrders': undefined,
213
+ 'fetchMyTrades': {
214
+ 'marginMode': false,
215
+ 'limit': undefined,
216
+ 'daysBack': undefined,
217
+ 'untilDays': undefined,
218
+ 'symbolRequired': false,
219
+ },
220
+ 'fetchOrder': {
221
+ 'marginMode': false,
222
+ 'trigger': false,
223
+ 'trailing': false,
224
+ 'symbolRequired': false,
225
+ },
226
+ 'fetchOpenOrders': {
227
+ 'marginMode': false,
228
+ 'limit': undefined,
229
+ 'trigger': false,
230
+ 'trailing': false,
231
+ 'symbolRequired': false,
232
+ },
233
+ 'fetchOrders': undefined,
234
+ 'fetchClosedOrders': undefined,
235
+ 'fetchOHLCV': {
236
+ 'limit': undefined,
237
+ },
238
+ },
239
+ 'swap': {
240
+ 'linear': {
241
+ 'extends': 'default',
242
+ },
243
+ 'inverse': undefined,
244
+ },
245
+ 'future': {
246
+ 'linear': {
247
+ 'extends': 'default',
248
+ },
249
+ 'inverse': undefined,
250
+ },
251
+ },
252
+ 'commonCurrencies': {},
253
+ 'exceptions': {
254
+ 'exact': {
255
+ '2': BadRequest,
256
+ '3': OrderNotFound,
257
+ '4': BadRequest, // {"errorCode":4,"message":"Missing accountId","status":"failed"}
258
+ },
259
+ 'broad': {},
260
+ },
261
+ 'precisionMode': TICK_SIZE,
262
+ });
263
+ }
264
+ getAccountId() {
265
+ this.checkRequiredCredentials();
266
+ const id = this.parseToInt(this.accountId);
267
+ return id;
268
+ }
269
+ parseMarket(market) {
270
+ const marketId = this.safeString(market, 'symbol');
271
+ const numericId = this.safeNumber(market, 'id');
272
+ const marketType = 'swap';
273
+ const baseId = this.safeString(market, 'underlyingSymbol');
274
+ const quoteId = this.safeString(market, 'settlementSymbol');
275
+ const base = this.safeCurrencyCode(baseId);
276
+ const quote = this.safeCurrencyCode(quoteId);
277
+ const settleId = this.safeString(market, 'settlementSymbol');
278
+ const settle = this.safeCurrencyCode(settleId);
279
+ const symbol = base + '/' + quote + ':' + settle;
280
+ const created = this.safeIntegerProduct(market, 'marketCreationTimestamp', 1000);
281
+ return {
282
+ 'id': marketId,
283
+ 'numericId': numericId,
284
+ 'symbol': symbol,
285
+ 'base': base,
286
+ 'quote': quote,
287
+ 'settle': settle,
288
+ 'baseId': baseId,
289
+ 'quoteId': quoteId,
290
+ 'settleId': settleId,
291
+ 'type': marketType,
292
+ 'spot': false,
293
+ 'margin': false,
294
+ 'swap': true,
295
+ 'future': false,
296
+ 'option': false,
297
+ 'active': this.safeString(market, 'status') === 'LIVE',
298
+ 'contract': true,
299
+ 'linear': true,
300
+ 'inverse': false,
301
+ 'contractSize': this.parseNumber('1'),
302
+ 'expiry': undefined,
303
+ 'expiryDatetime': undefined,
304
+ 'strike': undefined,
305
+ 'optionType': undefined,
306
+ 'precision': {
307
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'underlyingDecimals'))),
308
+ 'price': this.parseNumber(this.safeList(market, 'orderbookGranularities')[0]) / 10000.0,
309
+ },
310
+ 'limits': {
311
+ 'leverage': {
312
+ 'min': undefined,
313
+ 'max': undefined,
314
+ },
315
+ 'amount': {
316
+ 'min': undefined,
317
+ 'max': undefined,
318
+ },
319
+ 'price': {
320
+ 'min': undefined,
321
+ 'max': undefined,
322
+ },
323
+ 'cost': {
324
+ 'min': this.safeNumber(market, 'minNotional'),
325
+ 'max': undefined,
326
+ },
327
+ },
328
+ 'created': created,
329
+ 'info': market,
330
+ };
331
+ }
332
+ /**
333
+ * @method
334
+ * @name hibachi#fetchMarkets
335
+ * @description retrieves data on all markets for hibachi
336
+ * @see https://api-doc.hibachi.xyz/#183981da-8df5-40a0-a155-da15015dd536
337
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
338
+ * @returns {object[]} an array of objects representing market data
339
+ */
340
+ async fetchMarkets(params = {}) {
341
+ const response = await this.publicGetMarketExchangeInfo(params);
342
+ // {
343
+ // "displayName": "ETH/USDT Perps",
344
+ // "id": 1,
345
+ // "maintenanceFactorForPositions": "0.030000",
346
+ // "marketCloseTimestamp": null,
347
+ // "marketOpenTimestamp": null,
348
+ // "minNotional": "1",
349
+ // "minOrderSize": "0.000000001",
350
+ // "orderbookGranularities": [
351
+ // "0.01",
352
+ // "0.1",
353
+ // "1",
354
+ // "10"
355
+ // ],
356
+ // "riskFactorForOrders": "0.066667",
357
+ // "riskFactorForPositions": "0.030000",
358
+ // "settlementDecimals": 6,
359
+ // "settlementSymbol": "USDT",
360
+ // "status": "LIVE",
361
+ // "stepSize": "0.000000001",
362
+ // "symbol": "ETH/USDT-P",
363
+ // "tickSize": "0.000001",
364
+ // "underlyingDecimals": 9,
365
+ // "underlyingSymbol": "ETH"
366
+ // },
367
+ const rows = this.safeList(response, 'futureContracts');
368
+ return this.parseMarkets(rows);
369
+ }
370
+ /**
371
+ * @method
372
+ * @name hibachi#fetchCurrencies
373
+ * @description fetches all available currencies on an exchange
374
+ * @see https://api-doc.hibachi.xyz/#183981da-8df5-40a0-a155-da15015dd536
375
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
376
+ * @returns {object} an associative dictionary of currencies
377
+ */
378
+ async fetchCurrencies(params = {}) {
379
+ // Hibachi only supports USDT on Arbitrum at this time
380
+ // We don't have an API endpoint to expose this information yet
381
+ const result = {};
382
+ const networks = {};
383
+ const networkId = 'ARBITRUM';
384
+ networks[networkId] = {
385
+ 'id': networkId,
386
+ 'network': networkId,
387
+ 'limits': {
388
+ 'withdraw': {
389
+ 'min': undefined,
390
+ 'max': undefined,
391
+ },
392
+ 'deposit': {
393
+ 'min': undefined,
394
+ 'max': undefined,
395
+ },
396
+ },
397
+ 'active': undefined,
398
+ 'deposit': undefined,
399
+ 'withdraw': undefined,
400
+ 'info': {},
401
+ };
402
+ const code = this.safeCurrencyCode('USDT');
403
+ result[code] = this.safeCurrencyStructure({
404
+ 'id': 'USDT',
405
+ 'name': 'USDT',
406
+ 'type': 'fiat',
407
+ 'code': code,
408
+ 'precision': this.parseNumber('0.000001'),
409
+ 'active': true,
410
+ 'fee': undefined,
411
+ 'networks': networks,
412
+ 'deposit': true,
413
+ 'withdraw': true,
414
+ 'limits': {
415
+ 'deposit': {
416
+ 'min': undefined,
417
+ 'max': undefined,
418
+ },
419
+ 'withdraw': {
420
+ 'min': undefined,
421
+ 'max': undefined,
422
+ },
423
+ },
424
+ 'info': {},
425
+ });
426
+ return result;
427
+ }
428
+ parseBalance(response) {
429
+ const result = {
430
+ 'info': response,
431
+ };
432
+ // Hibachi only supports USDT on Arbitrum at this time
433
+ const code = this.safeCurrencyCode('USDT');
434
+ const account = this.account();
435
+ account['total'] = this.safeString(response, 'balance');
436
+ account['free'] = this.safeString(response, 'maximalWithdraw');
437
+ result[code] = account;
438
+ return this.safeBalance(result);
439
+ }
440
+ /**
441
+ * @method
442
+ * @name hibachi#fetchBalance
443
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
444
+ * @see https://api-doc.hibachi.xyz/#69aafedb-8274-4e21-bbaf-91dace8b8f31
445
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
446
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
447
+ */
448
+ async fetchBalance(params = {}) {
449
+ const request = {
450
+ 'accountId': this.getAccountId(),
451
+ };
452
+ const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
453
+ //
454
+ // {
455
+ // assets: [ { quantity: '3.000000', symbol: 'USDT' } ],
456
+ // balance: '3.000000',
457
+ // maximalWithdraw: '3.000000',
458
+ // numFreeTransfersRemaining: '100',
459
+ // positions: [],
460
+ // totalOrderNotional: '0.000000',
461
+ // totalPositionNotional: '0.000000',
462
+ // totalUnrealizedFundingPnl: '0.000000',
463
+ // totalUnrealizedPnl: '0.000000',
464
+ // totalUnrealizedTradingPnl: '0.000000',
465
+ // tradeMakerFeeRate: '0.00000000',
466
+ // tradeTakerFeeRate: '0.00020000'
467
+ // }
468
+ //
469
+ return this.parseBalance(response);
470
+ }
471
+ parseTicker(ticker, market = undefined) {
472
+ const prices = this.safeDict(ticker, 'prices');
473
+ const stats = this.safeDict(ticker, 'stats');
474
+ const bid = this.safeNumber(prices, 'bidPrice');
475
+ const ask = this.safeNumber(prices, 'askPrice');
476
+ const last = this.safeNumber(prices, 'tradePrice');
477
+ const high = this.safeNumber(stats, 'high24h');
478
+ const low = this.safeNumber(stats, 'low24h');
479
+ const volume = this.safeNumber(stats, 'volume24h');
480
+ return this.safeTicker({
481
+ 'symbol': this.safeSymbol(undefined, market),
482
+ 'timestamp': undefined,
483
+ 'datetime': undefined,
484
+ 'bid': bid,
485
+ 'ask': ask,
486
+ 'last': last,
487
+ 'high': high,
488
+ 'low': low,
489
+ 'bidVolume': undefined,
490
+ 'askVolume': undefined,
491
+ 'vwap': undefined,
492
+ 'open': undefined,
493
+ 'close': last,
494
+ 'previousClose': undefined,
495
+ 'change': undefined,
496
+ 'percentage': undefined,
497
+ 'average': undefined,
498
+ 'baseVolume': undefined,
499
+ 'quoteVolume': volume,
500
+ 'info': ticker,
501
+ }, market);
502
+ }
503
+ parseTrade(trade, market = undefined) {
504
+ // public fetchTrades:
505
+ // {
506
+ // "price": "3512.431902",
507
+ // "quantity": "1.414780098",
508
+ // "takerSide": "Buy",
509
+ // "timestamp": 1712692147
510
+ // }
511
+ //
512
+ // private fetchMyTrades:
513
+ // {
514
+ // "askAccountId": 221,
515
+ // "askOrderId": 589168494921909200,
516
+ // "bidAccountId": 132,
517
+ // "bidOrderId": 589168494829895700,
518
+ // "fee": "0.000477",
519
+ // "id": 199511136,
520
+ // "orderType": "MARKET",
521
+ // "price": "119257.90000",
522
+ // "quantity": "0.0000200000",
523
+ // "realizedPnl": "-0.000352",
524
+ // "side": "Sell",
525
+ // "symbol": "BTC/USDT-P",
526
+ // "timestamp": 1752543391
527
+ // }
528
+ const marketId = this.safeString(trade, 'symbol');
529
+ market = this.safeMarket(marketId, market);
530
+ const symbol = market['symbol'];
531
+ const id = this.safeString(trade, 'id');
532
+ const price = this.safeString(trade, 'price');
533
+ const amount = this.safeString(trade, 'quantity');
534
+ const timestamp = this.safeIntegerProduct(trade, 'timestamp', 1000);
535
+ const cost = Precise.stringMul(price, amount);
536
+ let side = undefined;
537
+ let fee = undefined;
538
+ let orderType = undefined;
539
+ let orderId = undefined;
540
+ let takerOrMaker = undefined;
541
+ if (id === undefined) {
542
+ // public trades
543
+ side = this.safeStringLower(trade, 'takerSide');
544
+ takerOrMaker = 'taker';
545
+ }
546
+ else {
547
+ // private trades
548
+ side = this.safeStringLower(trade, 'side');
549
+ fee = { 'cost': this.safeString(trade, 'fee'), 'currency': 'USDT' };
550
+ orderType = this.safeStringLower(trade, 'orderType');
551
+ if (side === 'buy') {
552
+ orderId = this.safeString(trade, 'bidOrderId');
553
+ }
554
+ else {
555
+ orderId = this.safeString(trade, 'askOrderId');
556
+ }
557
+ }
558
+ return this.safeTrade({
559
+ 'id': id,
560
+ 'timestamp': timestamp,
561
+ 'datetime': this.iso8601(timestamp),
562
+ 'symbol': symbol,
563
+ 'side': side,
564
+ 'price': price,
565
+ 'amount': amount,
566
+ 'cost': cost,
567
+ 'order': orderId,
568
+ 'takerOrMaker': takerOrMaker,
569
+ 'type': orderType,
570
+ 'fee': fee,
571
+ 'info': trade,
572
+ }, market);
573
+ }
574
+ /**
575
+ * @method
576
+ * @name hibachi#fetchTrades
577
+ * @description get the list of most recent trades for a particular symbol
578
+ * @see https://api-doc.hibachi.xyz/#86a53bc1-d3bb-4b93-8a11-7034d4698caa
579
+ * @param {string} symbol unified market symbol
580
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
581
+ * @param {int} [limit] the maximum amount of trades to fetch (maximum value is 100)
582
+ * @param {object} [params] extra parameters specific to the hibachi api endpoint
583
+ * @returns {object[]} a list of recent [trade structures]
584
+ */
585
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
586
+ await this.loadMarkets();
587
+ const market = this.market(symbol);
588
+ const request = {
589
+ 'symbol': market['id'],
590
+ };
591
+ const response = await this.publicGetMarketDataTrades(this.extend(request, params));
592
+ //
593
+ // {
594
+ // "trades": [
595
+ // {
596
+ // "price": "111091.38352",
597
+ // "quantity": "0.0090090093",
598
+ // "takerSide": "Buy",
599
+ // "timestamp": 1752095479
600
+ // },
601
+ // ]
602
+ // }
603
+ //
604
+ const trades = this.safeList(response, 'trades', []);
605
+ return this.parseTrades(trades, market);
606
+ }
607
+ /**
608
+ * @method
609
+ * @name hibachi#fetchTicker
610
+ * @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
611
+ * @description fetches a price ticker and the related information for the past 24h
612
+ * @param {string} symbol unified symbol of the market
613
+ * @param {object} [params] extra parameters specific to the hibachi api endpoint
614
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
615
+ */
616
+ async fetchTicker(symbol, params = {}) {
617
+ await this.loadMarkets();
618
+ const market = this.market(symbol);
619
+ const request = {
620
+ 'symbol': market['id'],
621
+ };
622
+ const rawPromises = [
623
+ this.publicGetMarketDataPrices(this.extend(request, params)),
624
+ this.publicGetMarketDataStats(this.extend(request, params)),
625
+ ];
626
+ const promises = await Promise.all(rawPromises);
627
+ const pricesResponse = promises[0];
628
+ // {
629
+ // "askPrice": "3514.650296",
630
+ // "bidPrice": "3513.596112",
631
+ // "fundingRateEstimation": {
632
+ // "estimatedFundingRate": "0.000001",
633
+ // "nextFundingTimestamp": 1712707200
634
+ // },
635
+ // "markPrice": "3514.288858",
636
+ // "spotPrice": "3514.715000",
637
+ // "symbol": "ETH/USDT-P",
638
+ // "tradePrice": "2372.746570"
639
+ // }
640
+ const statsResponse = promises[1];
641
+ // {
642
+ // "high24h": "3819.507827",
643
+ // "low24h": "3754.474162",
644
+ // "symbol": "ETH/USDT-P",
645
+ // "volume24h": "23554.858590416"
646
+ // }
647
+ const ticker = {
648
+ 'prices': pricesResponse,
649
+ 'stats': statsResponse,
650
+ };
651
+ return this.parseTicker(ticker, market);
652
+ }
653
+ parseOrderStatus(status) {
654
+ const statuses = {
655
+ 'PENDING': 'open',
656
+ 'CHILD_PENDING': 'open',
657
+ 'SCHEDULED_TWAP': 'open',
658
+ 'PLACED': 'open',
659
+ 'PARTIALLY_FILLED': 'open',
660
+ 'FILLED': 'closed',
661
+ 'CANCELLED': 'canceled',
662
+ 'REJECTED': 'rejected',
663
+ };
664
+ return this.safeString(statuses, status, status);
665
+ }
666
+ parseOrder(order, market = undefined) {
667
+ const marketId = this.safeString(order, 'symbol');
668
+ market = this.safeMarket(marketId, market);
669
+ const status = this.safeString(order, 'status');
670
+ const type = this.safeStringLower(order, 'orderType');
671
+ const price = this.safeString(order, 'price');
672
+ const rawSide = this.safeString(order, 'side');
673
+ let side = undefined;
674
+ if (rawSide === 'BID') {
675
+ side = 'buy';
676
+ }
677
+ else if (rawSide === 'ASK') {
678
+ side = 'sell';
679
+ }
680
+ const amount = this.safeString(order, 'totalQuantity');
681
+ const remaining = this.safeString(order, 'availableQuantity');
682
+ const totalQuantity = this.safeString(order, 'totalQuantity');
683
+ const availableQuantity = this.safeString(order, 'availableQuantity');
684
+ let filled = undefined;
685
+ if (totalQuantity !== undefined && availableQuantity !== undefined) {
686
+ filled = Precise.stringSub(totalQuantity, availableQuantity);
687
+ }
688
+ let timeInForce = 'GTC';
689
+ const orderFlags = this.safeValue(order, 'orderFlags');
690
+ let postOnly = false;
691
+ let reduceOnly = false;
692
+ if (orderFlags === 'POST_ONLY') {
693
+ timeInForce = 'PO';
694
+ postOnly = true;
695
+ }
696
+ else if (orderFlags === 'IOC') {
697
+ timeInForce = 'IOC';
698
+ }
699
+ else if (orderFlags === 'REDUCE_ONLY') {
700
+ reduceOnly = true;
701
+ }
702
+ return this.safeOrder({
703
+ 'info': order,
704
+ 'id': this.safeString(order, 'orderId'),
705
+ 'clientOrderId': undefined,
706
+ 'datetime': undefined,
707
+ 'timestamp': undefined,
708
+ 'lastTradeTimestamp': undefined,
709
+ 'lastUpdateTimestamp': undefined,
710
+ 'status': this.parseOrderStatus(status),
711
+ 'symbol': market['symbol'],
712
+ 'type': type,
713
+ 'timeInForce': timeInForce,
714
+ 'side': side,
715
+ 'price': price,
716
+ 'average': undefined,
717
+ 'amount': amount,
718
+ 'filled': filled,
719
+ 'remaining': remaining,
720
+ 'cost': undefined,
721
+ 'trades': undefined,
722
+ 'fee': undefined,
723
+ 'reduceOnly': reduceOnly,
724
+ 'postOnly': postOnly,
725
+ 'triggerPrice': this.safeNumber(order, 'triggerPrice'),
726
+ }, market);
727
+ }
728
+ /**
729
+ * @method
730
+ * @name hibachi#fetchOrder
731
+ * @description fetches information on an order made by the user
732
+ * @see https://api-doc.hibachi.xyz/#096a8854-b918-4de8-8731-b2a28d26b96d
733
+ * @param {string} id the order id
734
+ * @param {string} symbol unified symbol of the market the order was made in
735
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
736
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
737
+ */
738
+ async fetchOrder(id, symbol = undefined, params = {}) {
739
+ await this.loadMarkets();
740
+ let market = undefined;
741
+ if (symbol !== undefined) {
742
+ market = this.market(symbol);
743
+ }
744
+ const request = {
745
+ 'orderId': id,
746
+ 'accountId': this.getAccountId(),
747
+ };
748
+ const response = await this.privateGetTradeOrder(this.extend(request, params));
749
+ return this.parseOrder(response, market);
750
+ }
751
+ /**
752
+ * @method
753
+ * @name hibachi#fetchTradingFees
754
+ * @description fetch the trading fee
755
+ * @param params extra parameters
756
+ * @returns {object} a map of market symbols to [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
757
+ */
758
+ async fetchTradingFees(params = {}) {
759
+ await this.loadMarkets();
760
+ const request = {
761
+ 'accountId': this.getAccountId(),
762
+ };
763
+ const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
764
+ // {
765
+ // "tradeMakerFeeRate": "0.00000000",
766
+ // "tradeTakerFeeRate": "0.00020000"
767
+ // },
768
+ const makerFeeRate = this.safeNumber(response, 'tradeMakerFeeRate');
769
+ const takerFeeRate = this.safeNumber(response, 'tradeTakerFeeRate');
770
+ const result = {};
771
+ for (let i = 0; i < this.symbols.length; i++) {
772
+ const symbol = this.symbols[i];
773
+ result[symbol] = {
774
+ 'info': response,
775
+ 'symbol': symbol,
776
+ 'maker': makerFeeRate,
777
+ 'taker': takerFeeRate,
778
+ 'percentage': true,
779
+ };
780
+ }
781
+ return result;
782
+ }
783
+ orderMessage(market, nonce, feeRate, type, side, amount, price = undefined) {
784
+ let sideInternal = 0;
785
+ if (side === 'sell') {
786
+ sideInternal = 0;
787
+ }
788
+ else if (side === 'buy') {
789
+ sideInternal = 1;
790
+ }
791
+ // Converting them to internal representation:
792
+ // - Quantity: Internal = External * (10^underlyingDecimals)
793
+ // - Price: Internal = External * (2^32) * (10^(settlementDecimals-underlyingDecimals))
794
+ // - FeeRate: Internal = External * (10^8)
795
+ const amountStr = this.amountToPrecision(this.safeString(market, 'symbol'), amount);
796
+ const feeRateStr = this.numberToString(feeRate);
797
+ const info = this.safeDict(market, 'info');
798
+ const underlying = '1e' + this.safeString(info, 'underlyingDecimals');
799
+ const settlement = '1e' + this.safeString(info, 'settlementDecimals');
800
+ const one = '1';
801
+ const feeRateFactor = '100000000'; // 10^8
802
+ const priceFactor = '4294967296'; // 2^32
803
+ const quantityInternal = Precise.stringDiv(Precise.stringMul(amountStr, underlying), one, 0);
804
+ const feeRateInternal = Precise.stringDiv(Precise.stringMul(feeRateStr, feeRateFactor), one, 0);
805
+ // Encoding
806
+ const nonce16 = this.intToBase16(nonce);
807
+ const noncePadded = nonce16.padStart(16, '0');
808
+ const encodedNonce = this.base16ToBinary(noncePadded);
809
+ const numericId = this.intToBase16(this.safeInteger(market, 'numericId'));
810
+ const numericIdPadded = numericId.padStart(8, '0');
811
+ const encodedMarketId = this.base16ToBinary(numericIdPadded);
812
+ const quantity16 = this.intToBase16(this.parseToInt(quantityInternal));
813
+ const quantityPadded = quantity16.padStart(16, '0');
814
+ const encodedQuantity = this.base16ToBinary(quantityPadded);
815
+ const sideInternal16 = this.intToBase16(sideInternal);
816
+ const sidePadded = sideInternal16.padStart(8, '0');
817
+ const encodedSide = this.base16ToBinary(sidePadded);
818
+ const feeRateInternal16 = this.intToBase16(this.parseToInt(feeRateInternal));
819
+ const feeRatePadded = feeRateInternal16.padStart(16, '0');
820
+ const encodedFeeRate = this.base16ToBinary(feeRatePadded);
821
+ let encodedPrice = this.binaryConcat();
822
+ if (type === 'limit') {
823
+ const priceStr = this.priceToPrecision(this.safeString(market, 'symbol'), price);
824
+ const priceInternal = Precise.stringDiv(Precise.stringDiv(Precise.stringMul(Precise.stringMul(priceStr, priceFactor), settlement), underlying), one, 0);
825
+ const price16 = this.intToBase16(this.parseToInt(priceInternal));
826
+ const pricePadded = price16.padStart(16, '0');
827
+ encodedPrice = this.base16ToBinary(pricePadded);
828
+ }
829
+ const message = this.binaryConcat(encodedNonce, encodedMarketId, encodedQuantity, encodedSide, encodedPrice, encodedFeeRate);
830
+ return message;
831
+ }
832
+ createOrderRequest(nonce, symbol, type, side, amount, price = undefined, params = {}) {
833
+ const market = this.market(symbol);
834
+ const feeRate = Math.max(this.safeNumber(market, 'taker'), this.safeNumber(market, 'maker'));
835
+ let sideInternal = '';
836
+ if (side === 'sell') {
837
+ sideInternal = 'ASK';
838
+ }
839
+ else if (side === 'buy') {
840
+ sideInternal = 'BID';
841
+ }
842
+ let priceInternal = '';
843
+ if (price) {
844
+ priceInternal = this.priceToPrecision(symbol, price);
845
+ }
846
+ const message = this.orderMessage(market, nonce, feeRate, type, side, amount, price);
847
+ const signature = this.signMessage(message, this.privateKey);
848
+ const request = {
849
+ 'symbol': this.safeString(market, 'id'),
850
+ 'nonce': nonce,
851
+ 'side': sideInternal,
852
+ 'orderType': type.toUpperCase(),
853
+ 'quantity': this.amountToPrecision(symbol, amount),
854
+ 'price': priceInternal,
855
+ 'signature': signature,
856
+ 'maxFeesPercent': this.numberToString(feeRate),
857
+ };
858
+ const postOnly = this.isPostOnly(type.toUpperCase() === 'MARKET', undefined, params);
859
+ const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
860
+ const timeInForce = this.safeStringLower(params, 'timeInForce');
861
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
862
+ if (postOnly) {
863
+ request['orderFlags'] = 'POST_ONLY';
864
+ }
865
+ else if (timeInForce === 'ioc') {
866
+ request['orderFlags'] = 'IOC';
867
+ }
868
+ else if (reduceOnly) {
869
+ request['orderFlags'] = 'REDUCE_ONLY';
870
+ }
871
+ if (triggerPrice !== undefined) {
872
+ request['triggerPrice'] = triggerPrice;
873
+ }
874
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice']);
875
+ return this.extend(request, params);
876
+ }
877
+ /**
878
+ * @method
879
+ * @name hibachi#createOrder
880
+ * @description create a trade order
881
+ * @see https://api-doc.hibachi.xyz/#00f6d5ad-5275-41cb-a1a8-19ed5d142124
882
+ * @param {string} symbol unified symbol of the market to create an order in
883
+ * @param {string} type 'market' or 'limit'
884
+ * @param {string} side 'buy' or 'sell'
885
+ * @param {float} amount how much of currency you want to trade in units of base currency
886
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
887
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
888
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
889
+ */
890
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
891
+ await this.loadMarkets();
892
+ const nonce = this.nonce();
893
+ const request = this.createOrderRequest(nonce, symbol, type, side, amount, price, params);
894
+ request['accountId'] = this.getAccountId();
895
+ const response = await this.privatePostTradeOrder(request);
896
+ //
897
+ // {
898
+ // "orderId": "578721673790138368"
899
+ // }
900
+ //
901
+ return this.safeOrder({
902
+ 'id': this.safeString(response, 'orderId'),
903
+ 'status': 'pending',
904
+ });
905
+ }
906
+ /**
907
+ * @method
908
+ * @name hibachi#createOrders
909
+ * @description *contract only* create a list of trade orders
910
+ * @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
911
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
912
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
913
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
914
+ */
915
+ async createOrders(orders, params = {}) {
916
+ await this.loadMarkets();
917
+ const nonce = this.nonce();
918
+ const requestOrders = [];
919
+ for (let i = 0; i < orders.length; i++) {
920
+ const rawOrder = orders[i];
921
+ const symbol = this.safeString(rawOrder, 'symbol');
922
+ const type = this.safeString(rawOrder, 'type');
923
+ const side = this.safeString(rawOrder, 'side');
924
+ const amount = this.safeValue(rawOrder, 'amount');
925
+ const price = this.safeValue(rawOrder, 'price');
926
+ const orderParams = this.safeDict(rawOrder, 'params', {});
927
+ const orderRequest = this.createOrderRequest(nonce + i, symbol, type, side, amount, price, orderParams);
928
+ orderRequest['action'] = 'place';
929
+ requestOrders.push(orderRequest);
930
+ }
931
+ const request = {
932
+ 'accountId': this.getAccountId(),
933
+ 'orders': requestOrders,
934
+ };
935
+ const response = await this.privatePostTradeOrders(this.extend(request, params));
936
+ //
937
+ // { "orders": [ { nonce: '1754349993908', orderId: '589642085255349248' } ] }
938
+ //
939
+ const ret = [];
940
+ const responseOrders = this.safeList(response, 'orders');
941
+ for (let i = 0; i < responseOrders.length; i++) {
942
+ const responseOrder = responseOrders[i];
943
+ ret.push(this.safeOrder({
944
+ 'info': responseOrder,
945
+ 'id': this.safeString(responseOrder, 'orderId'),
946
+ 'status': 'pending',
947
+ }));
948
+ }
949
+ return ret;
950
+ }
951
+ editOrderRequest(nonce, id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
952
+ const market = this.market(symbol);
953
+ const feeRate = Math.max(this.safeNumber(market, 'taker'), this.safeNumber(market, 'maker'));
954
+ const message = this.orderMessage(market, nonce, feeRate, type, side, amount, price);
955
+ const signature = this.signMessage(message, this.privateKey);
956
+ const request = {
957
+ 'orderId': id,
958
+ 'nonce': nonce,
959
+ 'updatedQuantity': this.amountToPrecision(symbol, amount),
960
+ 'updatedPrice': this.priceToPrecision(symbol, price),
961
+ 'maxFeesPercent': this.numberToString(feeRate),
962
+ 'signature': signature,
963
+ };
964
+ return this.extend(request, params);
965
+ }
966
+ /**
967
+ * @method
968
+ * @name hibachi#editOrder
969
+ * @description edit a limit order that is not matched
970
+ * @see https://api-doc.hibachi.xyz/#94d2cdaf-1c71-440f-a981-da1112824810
971
+ * @param {string} id order id
972
+ * @param {string} symbol unified symbol of the market to create an order in
973
+ * @param {string} type must be 'limit'
974
+ * @param {string} side 'buy' or 'sell', should stay the same with original side
975
+ * @param {float} amount how much of currency you want to trade in units of base currency
976
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency
977
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
978
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
979
+ */
980
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
981
+ await this.loadMarkets();
982
+ const nonce = this.nonce();
983
+ const request = this.editOrderRequest(nonce, id, symbol, type, side, amount, price, params);
984
+ request['accountId'] = this.getAccountId();
985
+ await this.privatePutTradeOrder(request);
986
+ // At this time the response body is empty. A 200 response means the update request is accepted and sent to process
987
+ //
988
+ // {}
989
+ //
990
+ return this.safeOrder({
991
+ 'id': id,
992
+ 'status': 'pending',
993
+ });
994
+ }
995
+ /**
996
+ * @method
997
+ * @name hibachi#editOrders
998
+ * @description edit a list of trade orders
999
+ * @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
1000
+ * @param {Array} orders list of orders to edit, each object should contain the parameters required by editOrder, namely id, symbol, type, side, amount, price and params
1001
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1002
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1003
+ */
1004
+ async editOrders(orders, params = {}) {
1005
+ await this.loadMarkets();
1006
+ const nonce = this.nonce();
1007
+ const requestOrders = [];
1008
+ for (let i = 0; i < orders.length; i++) {
1009
+ const rawOrder = orders[i];
1010
+ const id = this.safeString(rawOrder, 'id');
1011
+ const symbol = this.safeString(rawOrder, 'symbol');
1012
+ const type = this.safeString(rawOrder, 'type');
1013
+ const side = this.safeString(rawOrder, 'side');
1014
+ const amount = this.safeValue(rawOrder, 'amount');
1015
+ const price = this.safeValue(rawOrder, 'price');
1016
+ const orderParams = this.safeDict(rawOrder, 'params', {});
1017
+ const orderRequest = this.editOrderRequest(nonce + i, id, symbol, type, side, amount, price, orderParams);
1018
+ orderRequest['action'] = 'modify';
1019
+ requestOrders.push(orderRequest);
1020
+ }
1021
+ const request = {
1022
+ 'accountId': this.getAccountId(),
1023
+ 'orders': requestOrders,
1024
+ };
1025
+ const response = await this.privatePostTradeOrders(this.extend(request, params));
1026
+ //
1027
+ // { "orders": [ { "orderId": "589636801329628160" } ] }
1028
+ //
1029
+ const ret = [];
1030
+ const responseOrders = this.safeList(response, 'orders');
1031
+ for (let i = 0; i < responseOrders.length; i++) {
1032
+ const responseOrder = responseOrders[i];
1033
+ ret.push(this.safeOrder({
1034
+ 'info': responseOrder,
1035
+ 'id': this.safeString(responseOrder, 'orderId'),
1036
+ 'status': 'pending',
1037
+ }));
1038
+ }
1039
+ return ret;
1040
+ }
1041
+ cancelOrderRequest(id) {
1042
+ const bigid = this.convertToBigInt(id);
1043
+ const idbase16 = this.intToBase16(bigid);
1044
+ const idPadded = idbase16.padStart(16, '0');
1045
+ const message = this.base16ToBinary(idPadded);
1046
+ const signature = this.signMessage(message, this.privateKey);
1047
+ return {
1048
+ 'orderId': id,
1049
+ 'signature': signature,
1050
+ };
1051
+ }
1052
+ /**
1053
+ * @method
1054
+ * @name hibachi#cancelOrder
1055
+ * @see https://api-doc.hibachi.xyz/#e99c4f48-e610-4b7c-b7f6-1b4bb7af0271
1056
+ * @description cancels an open order
1057
+ * @param {string} id order id
1058
+ * @param {string} symbol is unused
1059
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1060
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1061
+ */
1062
+ async cancelOrder(id, symbol = undefined, params = {}) {
1063
+ const request = this.cancelOrderRequest(id);
1064
+ request['accountId'] = this.getAccountId();
1065
+ const response = await this.privateDeleteTradeOrder(this.extend(request, params));
1066
+ // At this time the response body is empty. A 200 response means the cancel request is accepted and sent to cancel
1067
+ //
1068
+ // {}
1069
+ //
1070
+ return this.safeOrder({
1071
+ 'info': response,
1072
+ 'id': id,
1073
+ 'status': 'canceled',
1074
+ });
1075
+ }
1076
+ /**
1077
+ * @method
1078
+ * @name hibachi#cancelOrders
1079
+ * @description cancel multiple orders
1080
+ * @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
1081
+ * @param {string[]} ids order ids
1082
+ * @param {string} [symbol] unified market symbol, unused
1083
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1084
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1085
+ */
1086
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1087
+ const orders = [];
1088
+ for (let i = 0; i < ids.length; i++) {
1089
+ const orderRequest = this.cancelOrderRequest(ids[i]);
1090
+ orderRequest['action'] = 'cancel';
1091
+ orders.push(orderRequest);
1092
+ }
1093
+ const request = {
1094
+ 'accountId': this.getAccountId(),
1095
+ 'orders': orders,
1096
+ };
1097
+ const response = await this.privatePostTradeOrders(this.extend(request, params));
1098
+ //
1099
+ // { "orders": [ { "orderId": "589636801329628160" } ] }
1100
+ //
1101
+ const ret = [];
1102
+ const responseOrders = this.safeList(response, 'orders');
1103
+ for (let i = 0; i < responseOrders.length; i++) {
1104
+ const responseOrder = responseOrders[i];
1105
+ ret.push(this.safeOrder({
1106
+ 'info': responseOrder,
1107
+ 'id': this.safeString(responseOrder, 'orderId'),
1108
+ 'status': 'canceled',
1109
+ }));
1110
+ }
1111
+ return ret;
1112
+ }
1113
+ /**
1114
+ * @method
1115
+ * @name hibachi#cancelAllOrders
1116
+ * @see https://api-doc.hibachi.xyz/#8ed24695-016e-49b2-a72d-7511ca921fee
1117
+ * @description cancel all open orders in a market
1118
+ * @param {string} symbol unified market symbol
1119
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1120
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1121
+ */
1122
+ async cancelAllOrders(symbol = undefined, params = {}) {
1123
+ await this.loadMarkets();
1124
+ const nonce = this.nonce();
1125
+ const nonce16 = this.intToBase16(nonce);
1126
+ const noncePadded = nonce16.padStart(16, '0');
1127
+ const message = this.base16ToBinary(noncePadded);
1128
+ const signature = this.signMessage(message, this.privateKey);
1129
+ const request = {
1130
+ 'accountId': this.getAccountId(),
1131
+ 'nonce': nonce,
1132
+ 'signature': signature,
1133
+ };
1134
+ if (symbol !== undefined) {
1135
+ const market = this.market(symbol);
1136
+ request['contractId'] = this.safeInteger(market, 'numericId');
1137
+ }
1138
+ const response = await this.privateDeleteTradeOrders(this.extend(request, params));
1139
+ // At this time the response body is empty. A 200 response means the cancel request is accepted and sent to process
1140
+ //
1141
+ // {}
1142
+ //
1143
+ return [
1144
+ this.safeOrder({
1145
+ 'info': response,
1146
+ }),
1147
+ ];
1148
+ }
1149
+ encodeWithdrawMessage(amount, maxFees, address) {
1150
+ // Converting them to internal representation:
1151
+ // - Quantity: Internal = External * (10^6)
1152
+ // - maxFees: Internal = External * (10^6)
1153
+ // We only have USDT as our currency as this time
1154
+ const USDTAssetId = 1;
1155
+ const USDTFactor = '1000000';
1156
+ const amountStr = this.numberToString(amount);
1157
+ const maxFeesStr = this.numberToString(maxFees);
1158
+ const one = '1';
1159
+ const quantityInternal = Precise.stringDiv(Precise.stringMul(amountStr, USDTFactor), one, 0);
1160
+ const maxFeesInternal = Precise.stringDiv(Precise.stringMul(maxFeesStr, USDTFactor), one, 0);
1161
+ // Encoding
1162
+ const usdtAsset16 = this.intToBase16(USDTAssetId);
1163
+ const usdtAssetPadded = usdtAsset16.padStart(8, '0');
1164
+ const encodedAssetId = this.base16ToBinary(usdtAssetPadded);
1165
+ const quantity16 = this.intToBase16(this.parseToInt(quantityInternal));
1166
+ const quantityPadded = quantity16.padStart(16, '0');
1167
+ const encodedQuantity = this.base16ToBinary(quantityPadded);
1168
+ const maxFees16 = this.intToBase16(this.parseToInt(maxFeesInternal));
1169
+ const maxFeesPadded = maxFees16.padStart(16, '0');
1170
+ const encodedMaxFees = this.base16ToBinary(maxFeesPadded);
1171
+ const encodedAddress = this.base16ToBinary(address);
1172
+ const message = this.binaryConcat(encodedAssetId, encodedQuantity, encodedMaxFees, encodedAddress);
1173
+ return message;
1174
+ }
1175
+ /**
1176
+ * @method
1177
+ * @name hibachi#withdraw
1178
+ * @description make a withdrawal
1179
+ * @see https://api-doc.hibachi.xyz/#6421625d-3e45-45fa-be9b-d2a0e780c090
1180
+ * @param {string} code unified currency code, only support USDT
1181
+ * @param {float} amount the amount to withdraw
1182
+ * @param {string} address the address to withdraw to
1183
+ * @param {string} tag
1184
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1185
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1186
+ */
1187
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
1188
+ const withdrawAddress = address.slice(-40);
1189
+ // Get the withdraw fees
1190
+ const exchangeInfo = await this.publicGetMarketExchangeInfo(params);
1191
+ // {
1192
+ // "feeConfig": {
1193
+ // "depositFees": "0.004518",
1194
+ // "tradeMakerFeeRate": "0.00000000",
1195
+ // "tradeTakerFeeRate": "0.00020000",
1196
+ // "transferFeeRate": "0.00010000",
1197
+ // "withdrawalFees": "0.012050"
1198
+ // },
1199
+ // }
1200
+ const feeConfig = this.safeDict(exchangeInfo, 'feeConfig');
1201
+ const maxFees = this.safeNumber(feeConfig, 'withdrawalFees');
1202
+ // Generate the signature
1203
+ const message = this.encodeWithdrawMessage(amount, maxFees, withdrawAddress);
1204
+ const signature = this.signMessage(message, this.privateKey);
1205
+ const request = {
1206
+ 'accountId': this.getAccountId(),
1207
+ 'coin': 'USDT',
1208
+ 'network': 'ARBITRUM',
1209
+ 'withdrawAddress': withdrawAddress,
1210
+ 'selfWithdrawal': false,
1211
+ 'quantity': this.numberToString(amount),
1212
+ 'maxFees': this.numberToString(maxFees),
1213
+ 'signature': signature,
1214
+ };
1215
+ await this.privatePostCapitalWithdraw(this.extend(request, params));
1216
+ // At this time the response body is empty. A 200 response means the withdraw request is accepted and sent to process
1217
+ //
1218
+ // {}
1219
+ //
1220
+ return {
1221
+ 'info': undefined,
1222
+ 'id': undefined,
1223
+ 'txid': undefined,
1224
+ 'timestamp': this.milliseconds(),
1225
+ 'datetime': undefined,
1226
+ 'address': undefined,
1227
+ 'addressFrom': undefined,
1228
+ 'addressTo': withdrawAddress,
1229
+ 'tag': undefined,
1230
+ 'tagFrom': undefined,
1231
+ 'tagTo': undefined,
1232
+ 'type': 'withdrawal',
1233
+ 'amount': amount,
1234
+ 'currency': code,
1235
+ 'status': 'pending',
1236
+ 'fee': { 'currency': 'USDT', 'cost': maxFees },
1237
+ 'network': 'ARBITRUM',
1238
+ 'updated': undefined,
1239
+ 'comment': undefined,
1240
+ 'internal': undefined,
1241
+ };
1242
+ }
1243
+ nonce() {
1244
+ return this.milliseconds();
1245
+ }
1246
+ signMessage(message, privateKey) {
1247
+ if (privateKey.length === 44) {
1248
+ // For Exchange Managed account, the key length is 44 and we use HMAC to sign the message
1249
+ return this.hmac(message, this.encode(privateKey), sha256, 'hex');
1250
+ }
1251
+ else {
1252
+ // For Trustless account, the key length is 66 including '0x' and we use ECDSA to sign the message
1253
+ const hash = this.hash(this.encode(message), sha256, 'hex');
1254
+ const signature = ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1, undefined);
1255
+ const r = signature['r'];
1256
+ const s = signature['s'];
1257
+ const v = signature['v'];
1258
+ return r.padStart(64, '0') + s.padStart(64, '0') + this.intToBase16(v).padStart(2, '0');
1259
+ }
1260
+ }
1261
+ /**
1262
+ * @method
1263
+ * @name hibachi#fetchOrderBook
1264
+ * @description fetches the state of the open orders on the orderbook
1265
+ * @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
1266
+ * @param {string} symbol unified symbol of the market
1267
+ * @param {int} [limit] currently unused
1268
+ * @param {object} [params] extra parameters to be passed -- see documentation link above
1269
+ * @returns {object} A dictionary containg [orderbook information]{@link https://docs.ccxt.com/#/?id=order-book-structure}
1270
+ */
1271
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1272
+ await this.loadMarkets();
1273
+ const market = this.market(symbol);
1274
+ const request = {
1275
+ 'symbol': market['id'],
1276
+ };
1277
+ const response = await this.publicGetMarketDataOrderbook(this.extend(request, params));
1278
+ const formattedResponse = {};
1279
+ formattedResponse['ask'] = this.safeList(this.safeDict(response, 'ask'), 'levels');
1280
+ formattedResponse['bid'] = this.safeList(this.safeDict(response, 'bid'), 'levels');
1281
+ // {
1282
+ // "ask": {
1283
+ // "endPrice": "3512.63",
1284
+ // "levels": [
1285
+ // {
1286
+ // "price": "3511.93",
1287
+ // "quantity": "0.284772482"
1288
+ // },
1289
+ // {
1290
+ // "price": "3512.28",
1291
+ // "quantity": "0.569544964"
1292
+ // },
1293
+ // {
1294
+ // "price": "3512.63",
1295
+ // "quantity": "0.854317446"
1296
+ // }
1297
+ // ],
1298
+ // "startPrice": "3511.93"
1299
+ // },
1300
+ // "bid": {
1301
+ // "endPrice": "3510.87",
1302
+ // "levels": [
1303
+ // {
1304
+ // "price": "3515.39",
1305
+ // "quantity": "2.345153070"
1306
+ // },
1307
+ // {
1308
+ // "price": "3511.22",
1309
+ // "quantity": "0.284772482"
1310
+ // },
1311
+ // {
1312
+ // "price": "3510.87",
1313
+ // "quantity": "0.569544964"
1314
+ // }
1315
+ // ],
1316
+ // "startPrice": "3515.39"
1317
+ // }
1318
+ // }
1319
+ return this.parseOrderBook(formattedResponse, symbol, this.milliseconds(), 'bid', 'ask', 'price', 'quantity');
1320
+ }
1321
+ /**
1322
+ * @method
1323
+ * @name hibachi#fetchMyTrades
1324
+ * @see https://api-doc.hibachi.xyz/#0adbf143-189f-40e0-afdc-88af4cba3c79
1325
+ * @description fetch all trades made by the user
1326
+ * @param {string} symbol unified market symbol
1327
+ * @param {int} [since] the earliest time in ms to fetch trades for
1328
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1329
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1330
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1331
+ */
1332
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1333
+ await this.loadMarkets();
1334
+ let market = undefined;
1335
+ if (symbol !== undefined) {
1336
+ market = this.market(symbol);
1337
+ }
1338
+ const request = { 'accountId': this.getAccountId() };
1339
+ const response = await this.privateGetTradeAccountTrades(this.extend(request, params));
1340
+ //
1341
+ // {
1342
+ // "trades": [
1343
+ // {
1344
+ // "askAccountId": 221,
1345
+ // "askOrderId": 589168494921909200,
1346
+ // "bidAccountId": 132,
1347
+ // "bidOrderId": 589168494829895700,
1348
+ // "fee": "0.000477",
1349
+ // "id": 199511136,
1350
+ // "orderType": "MARKET",
1351
+ // "price": "119257.90000",
1352
+ // "quantity": "0.0000200000",
1353
+ // "realizedPnl": "-0.000352",
1354
+ // "side": "Sell",
1355
+ // "symbol": "BTC/USDT-P",
1356
+ // "timestamp": 1752543391
1357
+ // }
1358
+ // ]
1359
+ // }
1360
+ //
1361
+ const trades = this.safeList(response, 'trades');
1362
+ return this.parseTrades(trades, market, since, limit, params);
1363
+ }
1364
+ parseOHLCV(ohlcv, market = undefined) {
1365
+ //
1366
+ // [
1367
+ // {
1368
+ // "close": "3704.751036",
1369
+ // "high": "3716.530378",
1370
+ // "interval": "1h",
1371
+ // "low": "3699.627883",
1372
+ // "open": "3716.406894",
1373
+ // "timestamp": 1712628000,
1374
+ // "volumeNotional": "1637355.846362"
1375
+ // }
1376
+ // ]
1377
+ //
1378
+ return [
1379
+ this.safeIntegerProduct(ohlcv, 'timestamp', 1000),
1380
+ this.safeNumber(ohlcv, 'open'),
1381
+ this.safeNumber(ohlcv, 'high'),
1382
+ this.safeNumber(ohlcv, 'low'),
1383
+ this.safeNumber(ohlcv, 'close'),
1384
+ this.safeNumber(ohlcv, 'volumeNotional'),
1385
+ ];
1386
+ }
1387
+ /**
1388
+ * @method
1389
+ * @name hibachi#fetchOpenOrders
1390
+ * @description fetches all current open orders
1391
+ * @see https://api-doc.hibachi.xyz/#3243f8a0-086c-44c5-ab8a-71bbb7bab403
1392
+ * @param {string} [symbol] unified market symbol to filter by
1393
+ * @param {int} [since] milisecond timestamp of the earliest order
1394
+ * @param {int} [limit] the maximum number of open orders to return
1395
+ * @param {object} [params] extra parameters
1396
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1397
+ */
1398
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1399
+ await this.loadMarkets();
1400
+ let market = undefined;
1401
+ if (symbol !== undefined) {
1402
+ market = this.market(symbol);
1403
+ }
1404
+ const request = {
1405
+ 'accountId': this.getAccountId(),
1406
+ };
1407
+ const response = await this.privateGetTradeOrders(this.extend(request, params));
1408
+ // [
1409
+ // {
1410
+ // "accountId": 12452,
1411
+ // "availableQuantity": "0.0000230769",
1412
+ // "contractId": 2,
1413
+ // "creationTime": 1752684501,
1414
+ // "orderId": "589205486123876352",
1415
+ // "orderType": "LIMIT",
1416
+ // "price": "130000.00000",
1417
+ // "side": "ASK",
1418
+ // "status": "PLACED",
1419
+ // "symbol": "BTC/USDT-P",
1420
+ // "totalQuantity": "0.0000230769"
1421
+ // },
1422
+ // {
1423
+ // "accountId": 12452,
1424
+ // "availableQuantity": "1.234000000",
1425
+ // "contractId": 1,
1426
+ // "creationTime": 1752240682,
1427
+ // "orderId": "589089141754429441",
1428
+ // "orderType": "LIMIT",
1429
+ // "price": "1.234000",
1430
+ // "side": "BID",
1431
+ // "status": "PLACED",
1432
+ // "symbol": "ETH/USDT-P",
1433
+ // "totalQuantity": "1.234000000"
1434
+ // }
1435
+ // ]
1436
+ return this.parseOrders(response, market, since, limit);
1437
+ }
1438
+ /**
1439
+ * @name hibachi#fetchOHLCV
1440
+ * @see https://api-doc.hibachi.xyz/#4f0eacec-c61e-4d51-afb3-23c51c2c6bac
1441
+ * @description fetches historical candlestick data containing the close, high, low, open prices, interval and the volumeNotional
1442
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1443
+ * @param {string} timeframe the length of time each candle represents
1444
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1445
+ * @param {int} [limit] the maximum amount of candles to fetch
1446
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1447
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
1448
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1449
+ */
1450
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1451
+ await this.loadMarkets();
1452
+ const market = this.market(symbol);
1453
+ timeframe = this.safeString(this.timeframes, timeframe, timeframe);
1454
+ const request = {
1455
+ 'symbol': market['id'],
1456
+ 'interval': timeframe,
1457
+ };
1458
+ if (since !== undefined) {
1459
+ request['fromMs'] = since;
1460
+ }
1461
+ let until = undefined;
1462
+ [until, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'until');
1463
+ if (until !== undefined) {
1464
+ request['toMs'] = until;
1465
+ }
1466
+ const response = await this.publicGetMarketDataKlines(this.extend(request, params));
1467
+ //
1468
+ // [
1469
+ // {
1470
+ // "close": "3704.751036",
1471
+ // "high": "3716.530378",
1472
+ // "interval": "1h",
1473
+ // "low": "3699.627883",
1474
+ // "open": "3716.406894",
1475
+ // "timestamp": 1712628000,
1476
+ // "volumeNotional": "1637355.846362"
1477
+ // }
1478
+ // ]
1479
+ //
1480
+ const klines = this.safeList(response, 'klines', []);
1481
+ return this.parseOHLCVs(klines, market, timeframe, since, limit);
1482
+ }
1483
+ /**
1484
+ * @method
1485
+ * @name hibachi#fetchPositions
1486
+ * @description fetch all open positions
1487
+ * @see https://api-doc.hibachi.xyz/#69aafedb-8274-4e21-bbaf-91dace8b8f31
1488
+ * @param {string[]} [symbols] list of unified market symbols
1489
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1490
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1491
+ */
1492
+ async fetchPositions(symbols = undefined, params = {}) {
1493
+ await this.loadMarkets();
1494
+ symbols = this.marketSymbols(symbols);
1495
+ const request = {
1496
+ 'accountId': this.getAccountId(),
1497
+ };
1498
+ const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
1499
+ //
1500
+ // {
1501
+ // "assets": [
1502
+ // {
1503
+ // "quantity": "14.130626",
1504
+ // "symbol": "USDT"
1505
+ // }
1506
+ // ],
1507
+ // "balance": "14.186087",
1508
+ // "maximalWithdraw": "4.152340",
1509
+ // "numFreeTransfersRemaining": 96,
1510
+ // "positions": [
1511
+ // {
1512
+ // "direction": "Short",
1513
+ // "entryNotional": "10.302213",
1514
+ // "notionalValue": "10.225008",
1515
+ // "quantity": "0.004310550",
1516
+ // "symbol": "ETH/USDT-P",
1517
+ // "unrealizedFundingPnl": "0.000000",
1518
+ // "unrealizedTradingPnl": "0.077204"
1519
+ // },
1520
+ // {
1521
+ // "direction": "Short",
1522
+ // "entryNotional": "2.000016",
1523
+ // "notionalValue": "1.999390",
1524
+ // "quantity": "0.0000328410",
1525
+ // "symbol": "BTC/USDT-P",
1526
+ // "unrealizedFundingPnl": "0.000000",
1527
+ // "unrealizedTradingPnl": "0.000625"
1528
+ // },
1529
+ // {
1530
+ // "direction": "Short",
1531
+ // "entryNotional": "2.000015",
1532
+ // "notionalValue": "2.022384",
1533
+ // "quantity": "0.01470600",
1534
+ // "symbol": "SOL/USDT-P",
1535
+ // "unrealizedFundingPnl": "0.000000",
1536
+ // "unrealizedTradingPnl": "-0.022369"
1537
+ // }
1538
+ // ],
1539
+ // }
1540
+ //
1541
+ const data = this.safeList(response, 'positions', []);
1542
+ return this.parsePositions(data, symbols);
1543
+ }
1544
+ parsePosition(position, market = undefined) {
1545
+ //
1546
+ // {
1547
+ // "direction": "Short",
1548
+ // "entryNotional": "10.302213",
1549
+ // "notionalValue": "10.225008",
1550
+ // "quantity": "0.004310550",
1551
+ // "symbol": "ETH/USDT-P",
1552
+ // "unrealizedFundingPnl": "0.000000",
1553
+ // "unrealizedTradingPnl": "0.077204"
1554
+ // }
1555
+ //
1556
+ const marketId = this.safeString(position, 'symbol');
1557
+ market = this.safeMarket(marketId, market);
1558
+ const symbol = market['symbol'];
1559
+ const side = this.safeStringLower(position, 'direction');
1560
+ const quantity = this.safeString(position, 'quantity');
1561
+ const unrealizedFunding = this.safeString(position, 'unrealizedFundingPnl', '0');
1562
+ const unrealizedTrading = this.safeString(position, 'unrealizedTradingPnl', '0');
1563
+ const unrealizedPnl = Precise.stringAdd(unrealizedFunding, unrealizedTrading);
1564
+ return this.safePosition({
1565
+ 'info': position,
1566
+ 'id': undefined,
1567
+ 'symbol': symbol,
1568
+ 'entryPrice': this.safeString(position, 'average_entry_price'),
1569
+ 'markPrice': undefined,
1570
+ 'notional': this.safeString(position, 'notionalValue'),
1571
+ 'collateral': undefined,
1572
+ 'unrealizedPnl': unrealizedPnl,
1573
+ 'side': side,
1574
+ 'contracts': this.parseNumber(quantity),
1575
+ 'contractSize': undefined,
1576
+ 'timestamp': undefined,
1577
+ 'datetime': undefined,
1578
+ 'hedged': undefined,
1579
+ 'maintenanceMargin': undefined,
1580
+ 'maintenanceMarginPercentage': undefined,
1581
+ 'initialMargin': undefined,
1582
+ 'initialMarginPercentage': undefined,
1583
+ 'leverage': undefined,
1584
+ 'liquidationPrice': undefined,
1585
+ 'marginRatio': undefined,
1586
+ 'marginMode': undefined,
1587
+ 'percentage': undefined,
1588
+ });
1589
+ }
1590
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1591
+ const endpoint = '/' + this.implodeParams(path, params);
1592
+ let url = this.urls['api'][api] + endpoint;
1593
+ headers = {};
1594
+ if (method === 'GET') {
1595
+ const request = this.omit(params, this.extractParams(path));
1596
+ const query = this.urlencode(request);
1597
+ if (query.length !== 0) {
1598
+ url += '?' + query;
1599
+ }
1600
+ }
1601
+ if (method === 'POST' || method === 'PUT' || method === 'DELETE') {
1602
+ headers['Content-Type'] = 'application/json';
1603
+ body = this.json(params);
1604
+ }
1605
+ if (api === 'private') {
1606
+ this.checkRequiredCredentials();
1607
+ headers['Authorization'] = this.apiKey;
1608
+ }
1609
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
1610
+ }
1611
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
1612
+ if (response === undefined) {
1613
+ return undefined; // fallback to default error handler
1614
+ }
1615
+ if ('status' in response) {
1616
+ //
1617
+ // {"errorCode":4,"message":"Invalid input: Invalid quantity: 0","status":"failed"}
1618
+ //
1619
+ const status = this.safeString(response, 'status');
1620
+ if (status === 'failed') {
1621
+ const code = this.safeString(response, 'errorCode');
1622
+ const feedback = this.id + ' ' + body;
1623
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
1624
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
1625
+ const message = this.safeString(response, 'message');
1626
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
1627
+ throw new ExchangeError(feedback);
1628
+ }
1629
+ }
1630
+ return undefined;
1631
+ }
1632
+ parseTransactionType(type) {
1633
+ const types = {
1634
+ 'deposit': 'transaction',
1635
+ 'withdrawal': 'transaction',
1636
+ 'transfer-in': 'transfer',
1637
+ 'transfer-out': 'transfer',
1638
+ };
1639
+ return this.safeString(types, type, type);
1640
+ }
1641
+ parseTransactionStatus(status) {
1642
+ const statuses = {
1643
+ 'pending': 'pending',
1644
+ 'claimable': 'pending',
1645
+ 'completed': 'ok',
1646
+ 'failed': 'canceled',
1647
+ };
1648
+ return this.safeString(statuses, status, status);
1649
+ }
1650
+ parseLedgerEntry(item, currency = undefined) {
1651
+ const transactionType = this.safeString(item, 'transactionType');
1652
+ let timestamp = undefined;
1653
+ let type = undefined;
1654
+ let direction = undefined;
1655
+ let amount = undefined;
1656
+ let fee = undefined;
1657
+ let referenceId = undefined;
1658
+ let referenceAccount = undefined;
1659
+ let status = undefined;
1660
+ if (transactionType === undefined) {
1661
+ // response from TradeAccountTradingHistory
1662
+ timestamp = this.safeIntegerProduct(item, 'timestamp', 1000);
1663
+ type = 'trade';
1664
+ let amountStr = this.safeString(item, 'realizedPnl');
1665
+ if (Precise.stringLt(amountStr, '0')) {
1666
+ direction = 'out';
1667
+ amountStr = Precise.stringNeg(amountStr);
1668
+ }
1669
+ else {
1670
+ direction = 'in';
1671
+ }
1672
+ amount = this.parseNumber(amountStr);
1673
+ fee = { 'currency': 'USDT', 'cost': this.safeNumber(item, 'fee') };
1674
+ status = 'ok';
1675
+ }
1676
+ else {
1677
+ // response from CapitalHistory
1678
+ timestamp = this.safeIntegerProduct(item, 'timestampSec', 1000);
1679
+ amount = this.safeNumber(item, 'quantity');
1680
+ direction = (transactionType === 'deposit' || transactionType === 'transfer-in') ? 'in' : 'out';
1681
+ type = this.parseTransactionType(transactionType);
1682
+ status = this.parseTransactionStatus(this.safeString(item, 'status'));
1683
+ if (transactionType === 'transfer-in') {
1684
+ referenceAccount = this.safeString(item, 'srcAccountId');
1685
+ }
1686
+ else if (transactionType === 'transfer-out') {
1687
+ referenceAccount = this.safeString(item, 'receivingAccountId');
1688
+ }
1689
+ referenceId = this.safeString(item, 'transactionHash');
1690
+ }
1691
+ return this.safeLedgerEntry({
1692
+ 'id': this.safeString(item, 'id'),
1693
+ 'currency': this.currency('USDT'),
1694
+ 'account': this.numberToString(this.accountId),
1695
+ 'referenceAccount': referenceAccount,
1696
+ 'referenceId': referenceId,
1697
+ 'status': status,
1698
+ 'amount': amount,
1699
+ 'before': undefined,
1700
+ 'after': undefined,
1701
+ 'fee': fee,
1702
+ 'direction': direction,
1703
+ 'timestamp': timestamp,
1704
+ 'datetime': this.iso8601(timestamp),
1705
+ 'type': type,
1706
+ 'info': item,
1707
+ }, currency);
1708
+ }
1709
+ /**
1710
+ * @method
1711
+ * @name hibachi#fetchLedger
1712
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
1713
+ * @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
1714
+ * @param {string} [code] unified currency code, default is undefined
1715
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
1716
+ * @param {int} [limit] max number of ledger entries to return, default is undefined
1717
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1718
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
1719
+ */
1720
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
1721
+ await this.loadMarkets();
1722
+ const currency = this.currency('USDT');
1723
+ const request = { 'accountId': this.getAccountId() };
1724
+ const rawPromises = [
1725
+ this.privateGetCapitalHistory(this.extend(request, params)),
1726
+ this.privateGetTradeAccountTradingHistory(this.extend(request, params)),
1727
+ ];
1728
+ const promises = await Promise.all(rawPromises);
1729
+ const responseCapitalHistory = promises[0];
1730
+ //
1731
+ // {
1732
+ // "transactions": [
1733
+ // {
1734
+ // "assetId": 1,
1735
+ // "blockNumber": 358396669,
1736
+ // "chain": "Arbitrum",
1737
+ // "etaTsSec": null,
1738
+ // "id": 358396669,
1739
+ // "quantity": "0.999500",
1740
+ // "status": "pending",
1741
+ // "timestampSec": 1752692872,
1742
+ // "token": "USDT",
1743
+ // "transactionHash": "0x408e48881e0ba77d8638e3fe57bc06bdec513ddaa8b672e0aefa7e22e2f18b5e",
1744
+ // "transactionType": "deposit"
1745
+ // },
1746
+ // {
1747
+ // "assetId": 1,
1748
+ // "etaTsSec": null,
1749
+ // "id": 13116,
1750
+ // "instantWithdrawalChain": null,
1751
+ // "instantWithdrawalToken": null,
1752
+ // "isInstantWithdrawal": false,
1753
+ // "quantity": "0.040000",
1754
+ // "status": "completed",
1755
+ // "timestampSec": 1752542708,
1756
+ // "transactionHash": "0xe89cf90b2408d1a273dc9427654145def102d9449e5e2cfc10690ccffc3d7e28",
1757
+ // "transactionType": "withdrawal",
1758
+ // "withdrawalAddress": "0x23625d5fc6a6e32638d908eb4c3a3415e5121f76"
1759
+ // },
1760
+ // {
1761
+ // "assetId": 1,
1762
+ // "id": 167,
1763
+ // "quantity": "10.000000",
1764
+ // "srcAccountId": 175,
1765
+ // "srcAddress": "0xc2f77ce029438a3fdfe68ddee25991a9fb985a86",
1766
+ // "status": "completed",
1767
+ // "timestampSec": 1732224729,
1768
+ // "transactionType": "transfer-in"
1769
+ // },
1770
+ // {
1771
+ // "assetId": 1,
1772
+ // "id": 170,
1773
+ // "quantity": "10.000000",
1774
+ // "receivingAccountId": 175,
1775
+ // "receivingAddress": "0xc2f77ce029438a3fdfe68ddee25991a9fb985a86",
1776
+ // "status": "completed",
1777
+ // "timestampSec": 1732225631,
1778
+ // "transactionType": "transfer-out"
1779
+ // },
1780
+ // ]
1781
+ // }
1782
+ //
1783
+ const rowsCapitalHistory = this.safeList(responseCapitalHistory, 'transactions');
1784
+ const responseTradingHistory = promises[1];
1785
+ //
1786
+ // {
1787
+ // "tradingHistory": [
1788
+ // {
1789
+ // "eventType": "MARKET",
1790
+ // "fee": "0.000008",
1791
+ // "priceOrFundingRate": "119687.82481",
1792
+ // "quantity": "0.0000003727",
1793
+ // "realizedPnl": "0.004634",
1794
+ // "side": "Sell",
1795
+ // "symbol": "BTC/USDT-P",
1796
+ // "timestamp": 1752522571
1797
+ // },
1798
+ // {
1799
+ // "eventType": "FundingEvent",
1800
+ // "fee": "0",
1801
+ // "priceOrFundingRate": "0.000203",
1802
+ // "quantity": "0.0000003727",
1803
+ // "realizedPnl": "-0.000009067899008751979",
1804
+ // "side": "Long",
1805
+ // "symbol": "BTC/USDT-P",
1806
+ // "timestamp": 1752508800
1807
+ // },
1808
+ // ]
1809
+ // }
1810
+ //
1811
+ const rowsTradingHistory = this.safeList(responseTradingHistory, 'tradingHistory');
1812
+ const rows = this.arrayConcat(rowsCapitalHistory, rowsTradingHistory);
1813
+ return this.parseLedger(rows, currency, since, limit, params);
1814
+ }
1815
+ /**
1816
+ * @method
1817
+ * @name hibachi#fetchDepositAddress
1818
+ * @description fetch deposit address for given currency and chain. currently, we have a single EVM address across multiple EVM chains. Note: This method is currently only supported for trustless accounts
1819
+ * @param {string} code unified currency code
1820
+ * @param {object} [params] extra parameters for API
1821
+ * @param {string} [params.publicKey] your public key, you can get it from UI after creating API key
1822
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1823
+ */
1824
+ async fetchDepositAddress(code, params = {}) {
1825
+ const request = {
1826
+ 'publicKey': this.safeString(params, 'publicKey'),
1827
+ 'accountId': this.getAccountId(),
1828
+ };
1829
+ const response = await this.privateGetCapitalDepositInfo(this.extend(request, params));
1830
+ // {
1831
+ // "depositAddressEvm": "0x0b95d90b9345dadf1460bd38b9f4bb0d2f4ed788"
1832
+ // }
1833
+ return {
1834
+ 'info': response,
1835
+ 'currency': 'USDT',
1836
+ 'network': 'ARBITRUM',
1837
+ 'address': this.safeString(response, 'depositAddressEvm'),
1838
+ 'tag': undefined,
1839
+ };
1840
+ }
1841
+ parseTransaction(transaction, currency = undefined) {
1842
+ const timestamp = this.safeIntegerProduct(transaction, 'timestampSec', 1000);
1843
+ const address = this.safeString(transaction, 'withdrawalAddress');
1844
+ let transactionType = this.safeString(transaction, 'transactionType');
1845
+ if (transactionType !== 'deposit' && transactionType !== 'withdrawal') {
1846
+ transactionType = this.parseTransactionType(transactionType);
1847
+ }
1848
+ return {
1849
+ 'info': transaction,
1850
+ 'id': this.safeString(transaction, 'id'),
1851
+ 'txid': this.safeString(transaction, 'transactionHash'),
1852
+ 'timestamp': timestamp,
1853
+ 'datetime': this.iso8601(timestamp),
1854
+ 'network': 'ARBITRUM',
1855
+ 'address': address,
1856
+ 'addressTo': address,
1857
+ 'addressFrom': undefined,
1858
+ 'tag': undefined,
1859
+ 'tagTo': undefined,
1860
+ 'tagFrom': undefined,
1861
+ 'type': transactionType,
1862
+ 'amount': this.safeNumber(transaction, 'quantity'),
1863
+ 'currency': 'USDT',
1864
+ 'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
1865
+ 'updated': undefined,
1866
+ 'internal': undefined,
1867
+ 'comment': undefined,
1868
+ 'fee': undefined,
1869
+ };
1870
+ }
1871
+ /**
1872
+ * @method
1873
+ * @name hibachi#fetchDeposits
1874
+ * @description fetch deposits made to account
1875
+ * @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
1876
+ * @param {string} [code] unified currency code
1877
+ * @param {int} [since] filter by earliest timestamp (ms)
1878
+ * @param {int} [limit] maximum number of deposits to be returned
1879
+ * @param {object} [params] extra parameters to be passed to API
1880
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1881
+ */
1882
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
1883
+ const currency = this.safeCurrency(code);
1884
+ const request = {
1885
+ 'accountId': this.getAccountId(),
1886
+ };
1887
+ const response = await this.privateGetCapitalHistory(this.extend(request, params));
1888
+ // {
1889
+ // "transactions": [
1890
+ // {
1891
+ // "assetId": 1,
1892
+ // "blockNumber": 0,
1893
+ // "chain": null,
1894
+ // "etaTsSec": 1752758789,
1895
+ // "id": 42688,
1896
+ // "quantity": "6.130000",
1897
+ // "status": "completed",
1898
+ // "timestampSec": 1752758788,
1899
+ // "token": null,
1900
+ // "transactionHash": "0x8dcd7bd1155b5624fb5e38a1365888f712ec633a57434340e05080c70b0e3bba",
1901
+ // "transactionType": "deposit"
1902
+ // },
1903
+ // {
1904
+ // "assetId": 1,
1905
+ // "etaTsSec": null,
1906
+ // "id": 12993,
1907
+ // "instantWithdrawalChain": null,
1908
+ // "instantWithdrawalToken": null,
1909
+ // "isInstantWithdrawal": false,
1910
+ // "quantity": "0.111930",
1911
+ // "status": "completed",
1912
+ // "timestampSec": 1752387891,
1913
+ // "transactionHash": "0x32ab5fe5b90f6d753bab83523ebc8465eb9daef54580e13cb9ff031d400c5620",
1914
+ // "transactionType": "withdrawal",
1915
+ // "withdrawalAddress": "0x43f15ef2ef2ab5e61e987ee3d652a5872aea8a6c"
1916
+ // },
1917
+ // ]
1918
+ // }
1919
+ const transactions = this.safeList(response, 'transactions');
1920
+ const deposits = [];
1921
+ for (let i = 0; i < transactions.length; i++) {
1922
+ const transaction = transactions[i];
1923
+ if (this.safeString(transaction, 'transactionType') === 'deposit') {
1924
+ deposits.push(transaction);
1925
+ }
1926
+ }
1927
+ return this.parseTransactions(deposits, currency, since, limit, params);
1928
+ }
1929
+ /**
1930
+ * @method
1931
+ * @name hibachi#fetchWithdrawals
1932
+ * @description fetch withdrawals made from account
1933
+ * @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
1934
+ * @param {string} [code] unified currency code
1935
+ * @param {int} [since] filter by earliest timestamp (ms)
1936
+ * @param {int} [limit] maximum number of deposits to be returned
1937
+ * @param {object} [params] extra parameters to be passed to API
1938
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1939
+ */
1940
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1941
+ const currency = this.safeCurrency(code);
1942
+ const request = {
1943
+ 'accountId': this.getAccountId(),
1944
+ };
1945
+ const response = await this.privateGetCapitalHistory(this.extend(request, params));
1946
+ // {
1947
+ // "transactions": [
1948
+ // {
1949
+ // "assetId": 1,
1950
+ // "blockNumber": 0,
1951
+ // "chain": null,
1952
+ // "etaTsSec": 1752758789,
1953
+ // "id": 42688,
1954
+ // "quantity": "6.130000",
1955
+ // "status": "completed",
1956
+ // "timestampSec": 1752758788,
1957
+ // "token": null,
1958
+ // "transactionHash": "0x8dcd7bd1155b5624fb5e38a1365888f712ec633a57434340e05080c70b0e3bba",
1959
+ // "transactionType": "deposit"
1960
+ // },
1961
+ // {
1962
+ // "assetId": 1,
1963
+ // "etaTsSec": null,
1964
+ // "id": 12993,
1965
+ // "instantWithdrawalChain": null,
1966
+ // "instantWithdrawalToken": null,
1967
+ // "isInstantWithdrawal": false,
1968
+ // "quantity": "0.111930",
1969
+ // "status": "completed",
1970
+ // "timestampSec": 1752387891,
1971
+ // "transactionHash": "0x32ab5fe5b90f6d753bab83523ebc8465eb9daef54580e13cb9ff031d400c5620",
1972
+ // "transactionType": "withdrawal",
1973
+ // "withdrawalAddress": "0x43f15ef2ef2ab5e61e987ee3d652a5872aea8a6c"
1974
+ // },
1975
+ // ]
1976
+ // }
1977
+ const transactions = this.safeList(response, 'transactions');
1978
+ const withdrawals = [];
1979
+ for (let i = 0; i < transactions.length; i++) {
1980
+ const transaction = transactions[i];
1981
+ if (this.safeString(transaction, 'transactionType') === 'withdrawal') {
1982
+ withdrawals.push(transaction);
1983
+ }
1984
+ }
1985
+ return this.parseTransactions(withdrawals, currency, since, limit, params);
1986
+ }
1987
+ /**
1988
+ * @method
1989
+ * @name hibachi#fetchTime
1990
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
1991
+ * @see http://api-doc.hibachi.xyz/#b5c6a3bc-243d-4d35-b6d4-a74c92495434
1992
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1993
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
1994
+ */
1995
+ async fetchTime(params = {}) {
1996
+ const response = await this.publicGetExchangeUtcTimestamp(params);
1997
+ //
1998
+ // { "timestampMs":1754077574040 }
1999
+ //
2000
+ return this.safeInteger(response, 'timestampMs');
2001
+ }
2002
+ /**
2003
+ * @method
2004
+ * @name hibachi#fetchOpenInterest
2005
+ * @description retrieves the open interest of a contract trading pair
2006
+ * @see https://api-doc.hibachi.xyz/#bc34e8ae-e094-4802-8d56-3efe3a7bad49
2007
+ * @param {string} symbol unified CCXT market symbol
2008
+ * @param {object} [params] exchange specific parameters
2009
+ * @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
2010
+ */
2011
+ async fetchOpenInterest(symbol, params = {}) {
2012
+ await this.loadMarkets();
2013
+ const market = this.market(symbol);
2014
+ const request = {
2015
+ 'symbol': market['id'],
2016
+ };
2017
+ const response = await this.publicGetMarketDataOpenInterest(this.extend(request, params));
2018
+ //
2019
+ // { "totalQuantity" : "2.3299770166" }
2020
+ //
2021
+ const timestamp = this.milliseconds();
2022
+ return this.safeOpenInterest({
2023
+ 'symbol': symbol,
2024
+ 'openInterestAmount': this.safeString(response, 'totalQuantity'),
2025
+ 'openInterestValue': undefined,
2026
+ 'timestamp': timestamp,
2027
+ 'datetime': this.iso8601(timestamp),
2028
+ 'info': response,
2029
+ }, market);
2030
+ }
2031
+ /**
2032
+ * @method
2033
+ * @name hibachi#fetchFundingRate
2034
+ * @description fetch the current funding rate
2035
+ * @see https://api-doc.hibachi.xyz/#bca696ca-b9b2-4072-8864-5d6b8c09807e
2036
+ * @param {string} symbol unified market symbol
2037
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2038
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
2039
+ */
2040
+ async fetchFundingRate(symbol, params = {}) {
2041
+ await this.loadMarkets();
2042
+ const market = this.market(symbol);
2043
+ const request = {
2044
+ 'symbol': market['id'],
2045
+ };
2046
+ const response = await this.publicGetMarketDataPrices(this.extend(request, params));
2047
+ //
2048
+ // {
2049
+ // "askPrice": "3514.650296",
2050
+ // "bidPrice": "3513.596112",
2051
+ // "fundingRateEstimation": {
2052
+ // "estimatedFundingRate": "0.000001",
2053
+ // "nextFundingTimestamp": 1712707200
2054
+ // },
2055
+ // "markPrice": "3514.288858",
2056
+ // "spotPrice": "3514.715000",
2057
+ // "symbol": "ETH/USDT-P",
2058
+ // "tradePrice": "2372.746570"
2059
+ // }
2060
+ //
2061
+ const funding = this.safeDict(response, 'fundingRateEstimation', {});
2062
+ const timestamp = this.milliseconds();
2063
+ const nextFundingTimestamp = this.safeIntegerProduct(funding, 'nextFundingTimestamp', 1000);
2064
+ return {
2065
+ 'info': funding,
2066
+ 'symbol': market['symbol'],
2067
+ 'markPrice': undefined,
2068
+ 'indexPrice': undefined,
2069
+ 'interestRate': this.parseNumber('0'),
2070
+ 'estimatedSettlePrice': undefined,
2071
+ 'timestamp': timestamp,
2072
+ 'datetime': this.iso8601(timestamp),
2073
+ 'fundingRate': this.safeNumber(funding, 'estimatedFundingRate'),
2074
+ 'fundingTimestamp': nextFundingTimestamp,
2075
+ 'fundingDatetime': this.iso8601(nextFundingTimestamp),
2076
+ 'nextFundingRate': undefined,
2077
+ 'nextFundingTimestamp': undefined,
2078
+ 'nextFundingDatetime': undefined,
2079
+ 'previousFundingRate': undefined,
2080
+ 'previousFundingTimestamp': undefined,
2081
+ 'previousFundingDatetime': undefined,
2082
+ 'interval': '8h',
2083
+ };
2084
+ }
2085
+ /**
2086
+ * @method
2087
+ * @name hibachi#fetchFundingRateHistory
2088
+ * @description fetches historical funding rate prices
2089
+ * @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
2090
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
2091
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
2092
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
2093
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2094
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
2095
+ */
2096
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2097
+ await this.loadMarkets();
2098
+ const market = this.market(symbol);
2099
+ const request = {
2100
+ 'symbol': market['id'],
2101
+ };
2102
+ const response = await this.publicGetMarketDataFundingRates(this.extend(request, params));
2103
+ //
2104
+ // {
2105
+ // "data": [
2106
+ // {
2107
+ // "contractId": 2,
2108
+ // "fundingTimestamp": 1753488000,
2109
+ // "fundingRate": "0.000137",
2110
+ // "indexPrice": "117623.65010"
2111
+ // }
2112
+ // ]
2113
+ // }
2114
+ //
2115
+ const data = this.safeList(response, 'data');
2116
+ const rates = [];
2117
+ for (let i = 0; i < data.length; i++) {
2118
+ const entry = data[i];
2119
+ const timestamp = this.safeIntegerProduct(entry, 'fundingTimestamp', 1000);
2120
+ rates.push({
2121
+ 'info': entry,
2122
+ 'symbol': symbol,
2123
+ 'fundingRate': this.safeNumber(entry, 'fundingRate'),
2124
+ 'timestamp': timestamp,
2125
+ 'datetime': this.iso8601(timestamp),
2126
+ });
2127
+ }
2128
+ const sorted = this.sortBy(rates, 'timestamp');
2129
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
2130
+ }
2131
+ }