ccxt 4.4.65 → 4.4.68

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 (926) hide show
  1. package/README.md +15 -10
  2. package/dist/ccxt.browser.min.js +6 -6
  3. package/dist/cjs/ccxt.js +9 -1
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/bigone.js +1 -1
  8. package/dist/cjs/src/abstract/binance.js +1 -1
  9. package/dist/cjs/src/abstract/bingx.js +1 -1
  10. package/dist/cjs/src/abstract/bit2c.js +1 -1
  11. package/dist/cjs/src/abstract/bitbank.js +1 -1
  12. package/dist/cjs/src/abstract/bitbns.js +1 -1
  13. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  14. package/dist/cjs/src/abstract/bitfinex1.js +1 -1
  15. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  16. package/dist/cjs/src/abstract/bitget.js +1 -1
  17. package/dist/cjs/src/abstract/bithumb.js +1 -1
  18. package/dist/cjs/src/abstract/bitmart.js +1 -1
  19. package/dist/cjs/src/abstract/bitmex.js +1 -1
  20. package/dist/cjs/src/abstract/bitopro.js +1 -1
  21. package/dist/cjs/src/abstract/bitrue.js +1 -1
  22. package/dist/cjs/src/abstract/bitso.js +1 -1
  23. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  24. package/dist/cjs/src/abstract/bitteam.js +1 -1
  25. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/bl3p.js +1 -1
  27. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  28. package/dist/cjs/src/abstract/blofin.js +1 -1
  29. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  30. package/dist/cjs/src/abstract/btcbox.js +1 -1
  31. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  32. package/dist/cjs/src/abstract/btcturk.js +1 -1
  33. package/dist/cjs/src/abstract/bybit.js +1 -1
  34. package/dist/cjs/src/abstract/cex.js +1 -1
  35. package/dist/cjs/src/abstract/coinbase.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  38. package/dist/cjs/src/abstract/coincatch.js +1 -1
  39. package/dist/cjs/src/abstract/coincheck.js +1 -1
  40. package/dist/cjs/src/abstract/coinex.js +1 -1
  41. package/dist/cjs/src/abstract/coinlist.js +1 -1
  42. package/dist/cjs/src/abstract/coinmate.js +1 -1
  43. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  44. package/dist/cjs/src/abstract/coinone.js +1 -1
  45. package/dist/cjs/src/abstract/coinsph.js +1 -1
  46. package/dist/cjs/src/abstract/coinspot.js +1 -1
  47. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  48. package/dist/cjs/src/abstract/cryptomus.js +9 -0
  49. package/dist/cjs/src/abstract/defx.js +1 -1
  50. package/dist/cjs/src/abstract/delta.js +1 -1
  51. package/dist/cjs/src/abstract/deribit.js +1 -1
  52. package/dist/cjs/src/abstract/derive.js +9 -0
  53. package/dist/cjs/src/abstract/digifinex.js +1 -1
  54. package/dist/cjs/src/abstract/ellipx.js +1 -1
  55. package/dist/cjs/src/abstract/exmo.js +1 -1
  56. package/dist/cjs/src/abstract/gate.js +1 -1
  57. package/dist/cjs/src/abstract/gemini.js +1 -1
  58. package/dist/cjs/src/abstract/hashkey.js +1 -1
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/huobijp.js +1 -1
  63. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  64. package/dist/cjs/src/abstract/idex.js +1 -1
  65. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  66. package/dist/cjs/src/abstract/indodax.js +1 -1
  67. package/dist/cjs/src/abstract/kraken.js +1 -1
  68. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  69. package/dist/cjs/src/abstract/kucoin.js +1 -1
  70. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  71. package/dist/cjs/src/abstract/kuna.js +1 -1
  72. package/dist/cjs/src/abstract/latoken.js +1 -1
  73. package/dist/cjs/src/abstract/lbank.js +1 -1
  74. package/dist/cjs/src/abstract/luno.js +1 -1
  75. package/dist/cjs/src/abstract/mercado.js +1 -1
  76. package/dist/cjs/src/abstract/mexc.js +1 -1
  77. package/dist/cjs/src/abstract/ndax.js +1 -1
  78. package/dist/cjs/src/abstract/novadax.js +1 -1
  79. package/dist/cjs/src/abstract/oceanex.js +1 -1
  80. package/dist/cjs/src/abstract/okcoin.js +1 -1
  81. package/dist/cjs/src/abstract/okx.js +1 -1
  82. package/dist/cjs/src/abstract/onetrading.js +1 -1
  83. package/dist/cjs/src/abstract/oxfun.js +1 -1
  84. package/dist/cjs/src/abstract/p2b.js +1 -1
  85. package/dist/cjs/src/abstract/paradex.js +1 -1
  86. package/dist/cjs/src/abstract/paymium.js +1 -1
  87. package/dist/cjs/src/abstract/phemex.js +1 -1
  88. package/dist/cjs/src/abstract/poloniex.js +1 -1
  89. package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
  90. package/dist/cjs/src/abstract/probit.js +1 -1
  91. package/dist/cjs/src/abstract/timex.js +1 -1
  92. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  93. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  94. package/dist/cjs/src/abstract/upbit.js +1 -1
  95. package/dist/cjs/src/abstract/vertex.js +1 -1
  96. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  97. package/dist/cjs/src/abstract/whitebit.js +1 -1
  98. package/dist/cjs/src/abstract/woo.js +1 -1
  99. package/dist/cjs/src/abstract/woofipro.js +1 -1
  100. package/dist/cjs/src/abstract/xt.js +1 -1
  101. package/dist/cjs/src/abstract/yobit.js +1 -1
  102. package/dist/cjs/src/abstract/zaif.js +1 -1
  103. package/dist/cjs/src/abstract/zonda.js +1 -1
  104. package/dist/cjs/src/ace.js +1 -1
  105. package/dist/cjs/src/alpaca.js +1 -1
  106. package/dist/cjs/src/ascendex.js +1 -1
  107. package/dist/cjs/src/base/Exchange.js +12 -3
  108. package/dist/cjs/src/base/Precise.js +0 -6
  109. package/dist/cjs/src/base/errors.js +0 -6
  110. package/dist/cjs/src/base/functions/crypto.js +1 -1
  111. package/dist/cjs/src/base/functions/encode.js +1 -1
  112. package/dist/cjs/src/base/functions/misc.js +0 -1
  113. package/dist/cjs/src/base/functions/number.js +0 -6
  114. package/dist/cjs/src/base/functions/platform.js +0 -6
  115. package/dist/cjs/src/base/functions/rsa.js +0 -1
  116. package/dist/cjs/src/base/functions/string.js +0 -6
  117. package/dist/cjs/src/base/functions/throttle.js +1 -1
  118. package/dist/cjs/src/base/functions/time.js +0 -6
  119. package/dist/cjs/src/base/functions/totp.js +0 -1
  120. package/dist/cjs/src/base/functions/type.js +0 -6
  121. package/dist/cjs/src/base/functions.js +1 -1
  122. package/dist/cjs/src/base/ws/Cache.js +0 -6
  123. package/dist/cjs/src/base/ws/Client.js +0 -1
  124. package/dist/cjs/src/base/ws/Future.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  126. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  127. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  128. package/dist/cjs/src/bequant.js +1 -1
  129. package/dist/cjs/src/bigone.js +1 -1
  130. package/dist/cjs/src/binance.js +6 -5
  131. package/dist/cjs/src/binancecoinm.js +1 -1
  132. package/dist/cjs/src/binanceus.js +1 -1
  133. package/dist/cjs/src/binanceusdm.js +1 -1
  134. package/dist/cjs/src/bingx.js +1 -1
  135. package/dist/cjs/src/bit2c.js +1 -1
  136. package/dist/cjs/src/bitbank.js +1 -1
  137. package/dist/cjs/src/bitbns.js +1 -1
  138. package/dist/cjs/src/bitcoincom.js +1 -1
  139. package/dist/cjs/src/bitfinex.js +1 -1
  140. package/dist/cjs/src/bitfinex1.js +1 -1
  141. package/dist/cjs/src/bitflyer.js +1 -1
  142. package/dist/cjs/src/bitget.js +25 -14
  143. package/dist/cjs/src/bithumb.js +1 -1
  144. package/dist/cjs/src/bitmart.js +1 -1
  145. package/dist/cjs/src/bitmex.js +1 -1
  146. package/dist/cjs/src/bitopro.js +1 -1
  147. package/dist/cjs/src/bitpanda.js +1 -1
  148. package/dist/cjs/src/bitrue.js +7 -4
  149. package/dist/cjs/src/bitso.js +1 -1
  150. package/dist/cjs/src/bitstamp.js +1 -1
  151. package/dist/cjs/src/bitteam.js +1 -1
  152. package/dist/cjs/src/bl3p.js +1 -1
  153. package/dist/cjs/src/blockchaincom.js +1 -1
  154. package/dist/cjs/src/blofin.js +1 -1
  155. package/dist/cjs/src/btcalpha.js +1 -1
  156. package/dist/cjs/src/btcbox.js +1 -1
  157. package/dist/cjs/src/btcmarkets.js +1 -1
  158. package/dist/cjs/src/btcturk.js +1 -1
  159. package/dist/cjs/src/bybit.js +2 -2
  160. package/dist/cjs/src/cex.js +1 -1
  161. package/dist/cjs/src/coinbase.js +74 -2
  162. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  163. package/dist/cjs/src/coincatch.js +1 -1
  164. package/dist/cjs/src/coincheck.js +1 -1
  165. package/dist/cjs/src/coinex.js +1 -1
  166. package/dist/cjs/src/coinlist.js +0 -1
  167. package/dist/cjs/src/coinmate.js +1 -1
  168. package/dist/cjs/src/coinmetro.js +1 -1
  169. package/dist/cjs/src/coinone.js +1 -1
  170. package/dist/cjs/src/coinsph.js +0 -1
  171. package/dist/cjs/src/coinspot.js +1 -1
  172. package/dist/cjs/src/cryptocom.js +1 -1
  173. package/dist/cjs/src/cryptomus.js +1099 -0
  174. package/dist/cjs/src/defx.js +1 -1
  175. package/dist/cjs/src/delta.js +1 -1
  176. package/dist/cjs/src/deribit.js +1 -1
  177. package/dist/cjs/src/derive.js +2611 -0
  178. package/dist/cjs/src/digifinex.js +1 -1
  179. package/dist/cjs/src/ellipx.js +1 -1
  180. package/dist/cjs/src/exmo.js +1 -1
  181. package/dist/cjs/src/fmfwio.js +1 -1
  182. package/dist/cjs/src/gate.js +7 -2
  183. package/dist/cjs/src/gateio.js +1 -1
  184. package/dist/cjs/src/gemini.js +1 -1
  185. package/dist/cjs/src/hashkey.js +1 -1
  186. package/dist/cjs/src/hitbtc.js +0 -1
  187. package/dist/cjs/src/hollaex.js +1 -1
  188. package/dist/cjs/src/htx.js +22 -6
  189. package/dist/cjs/src/huobi.js +1 -1
  190. package/dist/cjs/src/huobijp.js +1 -1
  191. package/dist/cjs/src/hyperliquid.js +1 -1
  192. package/dist/cjs/src/idex.js +1 -1
  193. package/dist/cjs/src/independentreserve.js +1 -1
  194. package/dist/cjs/src/indodax.js +1 -1
  195. package/dist/cjs/src/kraken.js +1 -1
  196. package/dist/cjs/src/krakenfutures.js +1 -1
  197. package/dist/cjs/src/kucoin.js +1 -1
  198. package/dist/cjs/src/kucoinfutures.js +1 -1
  199. package/dist/cjs/src/kuna.js +1 -1
  200. package/dist/cjs/src/latoken.js +1 -1
  201. package/dist/cjs/src/lbank.js +1 -1
  202. package/dist/cjs/src/luno.js +113 -1
  203. package/dist/cjs/src/mercado.js +1 -1
  204. package/dist/cjs/src/mexc.js +1 -1
  205. package/dist/cjs/src/myokx.js +1 -1
  206. package/dist/cjs/src/ndax.js +1 -1
  207. package/dist/cjs/src/novadax.js +1 -1
  208. package/dist/cjs/src/oceanex.js +1 -1
  209. package/dist/cjs/src/okcoin.js +1 -1
  210. package/dist/cjs/src/okx.js +1 -1
  211. package/dist/cjs/src/onetrading.js +1 -1
  212. package/dist/cjs/src/oxfun.js +1 -1
  213. package/dist/cjs/src/p2b.js +1 -1
  214. package/dist/cjs/src/paradex.js +1 -1
  215. package/dist/cjs/src/paymium.js +1 -1
  216. package/dist/cjs/src/poloniex.js +1 -1
  217. package/dist/cjs/src/poloniexfutures.js +1 -1
  218. package/dist/cjs/src/pro/alpaca.js +1 -1
  219. package/dist/cjs/src/pro/ascendex.js +1 -1
  220. package/dist/cjs/src/pro/bequant.js +1 -1
  221. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  222. package/dist/cjs/src/pro/binanceus.js +1 -1
  223. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  224. package/dist/cjs/src/pro/bingx.js +1 -1
  225. package/dist/cjs/src/pro/bitcoincom.js +1 -1
  226. package/dist/cjs/src/pro/bitfinex.js +1 -1
  227. package/dist/cjs/src/pro/bitfinex1.js +1 -1
  228. package/dist/cjs/src/pro/bitget.js +1 -1
  229. package/dist/cjs/src/pro/bithumb.js +1 -1
  230. package/dist/cjs/src/pro/bitmart.js +1 -1
  231. package/dist/cjs/src/pro/bitmex.js +1 -1
  232. package/dist/cjs/src/pro/bitpanda.js +1 -1
  233. package/dist/cjs/src/pro/bitrue.js +1 -1
  234. package/dist/cjs/src/pro/bitstamp.js +1 -1
  235. package/dist/cjs/src/pro/bitvavo.js +1 -1
  236. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  237. package/dist/cjs/src/pro/blofin.js +1 -1
  238. package/dist/cjs/src/pro/bybit.js +1 -1
  239. package/dist/cjs/src/pro/cex.js +1 -1
  240. package/dist/cjs/src/pro/coinbase.js +1 -1
  241. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  242. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  243. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  244. package/dist/cjs/src/pro/coincatch.js +1 -1
  245. package/dist/cjs/src/pro/coincheck.js +1 -1
  246. package/dist/cjs/src/pro/coinex.js +1 -1
  247. package/dist/cjs/src/pro/coinone.js +1 -1
  248. package/dist/cjs/src/pro/cryptocom.js +1 -1
  249. package/dist/cjs/src/pro/defx.js +1 -1
  250. package/dist/cjs/src/pro/deribit.js +1 -1
  251. package/dist/cjs/src/pro/derive.js +752 -0
  252. package/dist/cjs/src/pro/exmo.js +1 -1
  253. package/dist/cjs/src/pro/gate.js +2 -1
  254. package/dist/cjs/src/pro/gateio.js +1 -1
  255. package/dist/cjs/src/pro/gemini.js +1 -1
  256. package/dist/cjs/src/pro/hashkey.js +1 -1
  257. package/dist/cjs/src/pro/hitbtc.js +1 -1
  258. package/dist/cjs/src/pro/hollaex.js +1 -1
  259. package/dist/cjs/src/pro/htx.js +1 -1
  260. package/dist/cjs/src/pro/huobi.js +1 -1
  261. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  262. package/dist/cjs/src/pro/idex.js +1 -1
  263. package/dist/cjs/src/pro/independentreserve.js +1 -1
  264. package/dist/cjs/src/pro/kraken.js +1 -1
  265. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  266. package/dist/cjs/src/pro/kucoin.js +1 -1
  267. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  268. package/dist/cjs/src/pro/lbank.js +0 -1
  269. package/dist/cjs/src/pro/luno.js +1 -1
  270. package/dist/cjs/src/pro/mexc.js +1 -1
  271. package/dist/cjs/src/pro/myokx.js +1 -1
  272. package/dist/cjs/src/pro/ndax.js +1 -1
  273. package/dist/cjs/src/pro/okcoin.js +1 -1
  274. package/dist/cjs/src/pro/okx.js +1 -1
  275. package/dist/cjs/src/pro/onetrading.js +1 -1
  276. package/dist/cjs/src/pro/oxfun.js +1 -1
  277. package/dist/cjs/src/pro/p2b.js +1 -1
  278. package/dist/cjs/src/pro/paradex.js +1 -1
  279. package/dist/cjs/src/pro/phemex.js +1 -1
  280. package/dist/cjs/src/pro/poloniex.js +1 -1
  281. package/dist/cjs/src/pro/poloniexfutures.js +1 -1
  282. package/dist/cjs/src/pro/probit.js +1 -1
  283. package/dist/cjs/src/pro/upbit.js +1 -1
  284. package/dist/cjs/src/pro/whitebit.js +1 -1
  285. package/dist/cjs/src/pro/xt.js +1 -1
  286. package/dist/cjs/src/probit.js +1 -1
  287. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  288. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  289. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  290. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  291. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  292. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  293. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  294. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  295. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  296. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  297. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  298. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  299. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  300. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  301. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  302. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  303. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  304. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  305. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  306. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  307. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  308. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  309. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  310. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  311. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  312. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  313. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  314. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  315. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  316. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  318. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  319. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  321. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  323. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  324. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  325. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  326. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  327. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  328. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  329. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  330. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  332. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  333. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  334. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  335. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  337. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  338. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  339. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  340. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  341. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  342. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  343. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  344. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  345. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  346. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  347. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  348. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  349. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  350. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  351. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  352. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  353. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  354. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  355. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  356. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  357. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  358. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  359. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  360. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  361. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  362. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  363. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  364. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  365. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  366. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  367. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  368. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  369. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  370. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  371. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  372. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  373. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  374. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  375. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  376. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  377. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  378. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  380. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  390. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  391. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  392. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  393. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  394. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  395. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  396. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  397. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  398. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  399. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  400. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  401. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  402. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  403. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  404. package/dist/cjs/src/timex.js +0 -1
  405. package/dist/cjs/src/tokocrypto.js +1 -1
  406. package/dist/cjs/src/tradeogre.js +138 -13
  407. package/dist/cjs/src/upbit.js +1 -1
  408. package/dist/cjs/src/vertex.js +1 -1
  409. package/dist/cjs/src/wavesexchange.js +1 -1
  410. package/dist/cjs/src/whitebit.js +283 -2
  411. package/dist/cjs/src/woo.js +1 -1
  412. package/dist/cjs/src/woofipro.js +1 -1
  413. package/dist/cjs/src/xt.js +1 -1
  414. package/dist/cjs/src/yobit.js +1 -1
  415. package/dist/cjs/src/zaif.js +1 -1
  416. package/dist/cjs/src/zonda.js +1 -1
  417. package/js/ccxt.d.ts +11 -2
  418. package/js/ccxt.js +8 -8
  419. package/js/src/abstract/ace.js +0 -6
  420. package/js/src/abstract/alpaca.js +0 -6
  421. package/js/src/abstract/ascendex.js +0 -6
  422. package/js/src/abstract/bequant.js +0 -6
  423. package/js/src/abstract/bigone.js +0 -6
  424. package/js/src/abstract/binance.js +0 -6
  425. package/js/src/abstract/binancecoinm.js +0 -6
  426. package/js/src/abstract/binanceus.js +0 -6
  427. package/js/src/abstract/binanceusdm.js +0 -6
  428. package/js/src/abstract/bingx.js +0 -6
  429. package/js/src/abstract/bit2c.js +0 -6
  430. package/js/src/abstract/bitbank.js +0 -6
  431. package/js/src/abstract/bitbns.js +0 -6
  432. package/js/src/abstract/bitcoincom.js +0 -6
  433. package/js/src/abstract/bitfinex.js +0 -6
  434. package/js/src/abstract/bitfinex1.js +0 -6
  435. package/js/src/abstract/bitflyer.js +0 -6
  436. package/js/src/abstract/bitget.js +0 -6
  437. package/js/src/abstract/bithumb.js +0 -6
  438. package/js/src/abstract/bitmart.js +0 -6
  439. package/js/src/abstract/bitmex.js +0 -6
  440. package/js/src/abstract/bitopro.js +0 -6
  441. package/js/src/abstract/bitpanda.js +0 -6
  442. package/js/src/abstract/bitrue.js +0 -6
  443. package/js/src/abstract/bitso.js +0 -6
  444. package/js/src/abstract/bitstamp.js +0 -6
  445. package/js/src/abstract/bitteam.js +0 -6
  446. package/js/src/abstract/bitvavo.js +0 -6
  447. package/js/src/abstract/bl3p.js +0 -6
  448. package/js/src/abstract/blockchaincom.js +0 -6
  449. package/js/src/abstract/blofin.js +0 -6
  450. package/js/src/abstract/btcalpha.js +0 -6
  451. package/js/src/abstract/btcbox.js +0 -6
  452. package/js/src/abstract/btcmarkets.js +0 -6
  453. package/js/src/abstract/btcturk.js +0 -6
  454. package/js/src/abstract/bybit.js +0 -6
  455. package/js/src/abstract/cex.js +0 -6
  456. package/js/src/abstract/coinbase.js +0 -6
  457. package/js/src/abstract/coinbaseadvanced.js +0 -6
  458. package/js/src/abstract/coinbaseexchange.js +0 -6
  459. package/js/src/abstract/coinbaseinternational.js +0 -6
  460. package/js/src/abstract/coincatch.js +0 -6
  461. package/js/src/abstract/coincheck.js +0 -6
  462. package/js/src/abstract/coinex.js +0 -6
  463. package/js/src/abstract/coinlist.js +0 -6
  464. package/js/src/abstract/coinmate.js +0 -6
  465. package/js/src/abstract/coinmetro.js +0 -6
  466. package/js/src/abstract/coinone.js +0 -6
  467. package/js/src/abstract/coinsph.js +0 -6
  468. package/js/src/abstract/coinspot.js +0 -6
  469. package/js/src/abstract/cryptocom.js +0 -6
  470. package/js/src/abstract/cryptomus.d.ts +23 -0
  471. package/js/src/abstract/cryptomus.js +5 -0
  472. package/js/src/abstract/defx.js +0 -6
  473. package/js/src/abstract/delta.js +0 -6
  474. package/js/src/abstract/deribit.js +0 -6
  475. package/js/src/abstract/derive.d.ts +120 -0
  476. package/js/src/abstract/derive.js +5 -0
  477. package/js/src/abstract/digifinex.js +0 -6
  478. package/js/src/abstract/ellipx.js +0 -6
  479. package/js/src/abstract/exmo.js +0 -6
  480. package/js/src/abstract/fmfwio.js +0 -6
  481. package/js/src/abstract/gate.js +0 -6
  482. package/js/src/abstract/gateio.js +0 -6
  483. package/js/src/abstract/gemini.js +0 -6
  484. package/js/src/abstract/hashkey.js +0 -6
  485. package/js/src/abstract/hitbtc.js +0 -6
  486. package/js/src/abstract/hollaex.js +0 -6
  487. package/js/src/abstract/htx.js +0 -6
  488. package/js/src/abstract/huobi.js +0 -6
  489. package/js/src/abstract/huobijp.js +0 -6
  490. package/js/src/abstract/hyperliquid.js +0 -6
  491. package/js/src/abstract/idex.js +0 -6
  492. package/js/src/abstract/independentreserve.js +0 -6
  493. package/js/src/abstract/indodax.js +0 -6
  494. package/js/src/abstract/kraken.js +0 -6
  495. package/js/src/abstract/krakenfutures.js +0 -6
  496. package/js/src/abstract/kucoin.js +0 -6
  497. package/js/src/abstract/kucoinfutures.js +0 -6
  498. package/js/src/abstract/kuna.js +0 -6
  499. package/js/src/abstract/latoken.js +0 -6
  500. package/js/src/abstract/lbank.js +0 -6
  501. package/js/src/abstract/luno.js +0 -6
  502. package/js/src/abstract/mercado.js +0 -6
  503. package/js/src/abstract/mexc.js +0 -6
  504. package/js/src/abstract/myokx.js +0 -6
  505. package/js/src/abstract/ndax.js +0 -6
  506. package/js/src/abstract/novadax.js +0 -6
  507. package/js/src/abstract/oceanex.js +0 -6
  508. package/js/src/abstract/okcoin.js +0 -6
  509. package/js/src/abstract/okx.js +0 -6
  510. package/js/src/abstract/onetrading.js +0 -6
  511. package/js/src/abstract/oxfun.js +0 -6
  512. package/js/src/abstract/p2b.js +0 -6
  513. package/js/src/abstract/paradex.js +0 -6
  514. package/js/src/abstract/paymium.js +0 -6
  515. package/js/src/abstract/phemex.js +0 -6
  516. package/js/src/abstract/poloniex.js +0 -6
  517. package/js/src/abstract/poloniexfutures.js +0 -6
  518. package/js/src/abstract/probit.js +0 -6
  519. package/js/src/abstract/timex.js +0 -6
  520. package/js/src/abstract/tokocrypto.js +0 -6
  521. package/js/src/abstract/tradeogre.d.ts +1 -0
  522. package/js/src/abstract/tradeogre.js +0 -6
  523. package/js/src/abstract/upbit.js +0 -6
  524. package/js/src/abstract/vertex.js +0 -6
  525. package/js/src/abstract/wavesexchange.js +0 -6
  526. package/js/src/abstract/whitebit.d.ts +16 -0
  527. package/js/src/abstract/whitebit.js +0 -6
  528. package/js/src/abstract/woo.js +0 -6
  529. package/js/src/abstract/woofipro.js +0 -6
  530. package/js/src/abstract/xt.js +0 -6
  531. package/js/src/abstract/yobit.js +0 -6
  532. package/js/src/abstract/zaif.js +0 -6
  533. package/js/src/abstract/zonda.js +0 -6
  534. package/js/src/ace.js +0 -6
  535. package/js/src/alpaca.js +0 -6
  536. package/js/src/ascendex.js +0 -6
  537. package/js/src/base/Exchange.d.ts +2 -0
  538. package/js/src/base/Exchange.js +13 -10
  539. package/js/src/base/Precise.js +0 -6
  540. package/js/src/base/errorHierarchy.js +0 -6
  541. package/js/src/base/errors.js +0 -6
  542. package/js/src/base/functions/crypto.js +0 -6
  543. package/js/src/base/functions/encode.js +0 -6
  544. package/js/src/base/functions/generic.js +0 -6
  545. package/js/src/base/functions/misc.js +0 -6
  546. package/js/src/base/functions/number.js +0 -6
  547. package/js/src/base/functions/platform.js +0 -6
  548. package/js/src/base/functions/rsa.js +0 -6
  549. package/js/src/base/functions/string.js +0 -6
  550. package/js/src/base/functions/throttle.js +0 -6
  551. package/js/src/base/functions/time.js +0 -6
  552. package/js/src/base/functions/totp.js +0 -6
  553. package/js/src/base/functions/type.js +0 -6
  554. package/js/src/base/functions.js +0 -6
  555. package/js/src/base/types.js +0 -6
  556. package/js/src/base/ws/Cache.js +0 -6
  557. package/js/src/base/ws/Client.js +0 -6
  558. package/js/src/base/ws/Future.js +0 -6
  559. package/js/src/base/ws/OrderBook.js +0 -6
  560. package/js/src/base/ws/OrderBookSide.js +0 -6
  561. package/js/src/base/ws/WsClient.js +0 -6
  562. package/js/src/base/ws/functions.js +0 -6
  563. package/js/src/bequant.js +0 -6
  564. package/js/src/bigone.js +0 -6
  565. package/js/src/binance.js +5 -10
  566. package/js/src/binancecoinm.js +0 -6
  567. package/js/src/binanceus.js +0 -6
  568. package/js/src/binanceusdm.js +0 -6
  569. package/js/src/bingx.js +0 -6
  570. package/js/src/bit2c.js +0 -6
  571. package/js/src/bitbank.js +0 -6
  572. package/js/src/bitbns.js +0 -6
  573. package/js/src/bitcoincom.js +0 -6
  574. package/js/src/bitfinex.js +0 -6
  575. package/js/src/bitfinex1.js +0 -6
  576. package/js/src/bitflyer.js +0 -6
  577. package/js/src/bitget.d.ts +12 -4
  578. package/js/src/bitget.js +24 -19
  579. package/js/src/bithumb.js +0 -6
  580. package/js/src/bitmart.js +0 -6
  581. package/js/src/bitmex.js +0 -6
  582. package/js/src/bitopro.js +0 -6
  583. package/js/src/bitpanda.js +0 -6
  584. package/js/src/bitrue.d.ts +1 -0
  585. package/js/src/bitrue.js +6 -9
  586. package/js/src/bitso.js +0 -6
  587. package/js/src/bitstamp.js +0 -6
  588. package/js/src/bitteam.js +0 -6
  589. package/js/src/bitvavo.js +0 -6
  590. package/js/src/bl3p.js +0 -6
  591. package/js/src/blockchaincom.js +0 -6
  592. package/js/src/blofin.js +0 -6
  593. package/js/src/btcalpha.js +0 -6
  594. package/js/src/btcbox.js +0 -6
  595. package/js/src/btcmarkets.js +0 -6
  596. package/js/src/btcturk.js +0 -6
  597. package/js/src/bybit.js +1 -7
  598. package/js/src/cex.js +0 -6
  599. package/js/src/coinbase.d.ts +16 -0
  600. package/js/src/coinbase.js +74 -8
  601. package/js/src/coinbaseadvanced.js +0 -6
  602. package/js/src/coinbaseexchange.js +0 -6
  603. package/js/src/coinbaseinternational.js +0 -6
  604. package/js/src/coincatch.js +0 -6
  605. package/js/src/coincheck.js +0 -6
  606. package/js/src/coinex.js +0 -6
  607. package/js/src/coinlist.js +0 -6
  608. package/js/src/coinmate.js +0 -6
  609. package/js/src/coinmetro.js +0 -6
  610. package/js/src/coinone.js +0 -6
  611. package/js/src/coinsph.js +0 -6
  612. package/js/src/coinspot.js +0 -6
  613. package/js/src/cryptocom.js +0 -6
  614. package/js/src/cryptomus.d.ts +32 -0
  615. package/js/src/cryptomus.js +1094 -0
  616. package/js/src/defx.js +0 -6
  617. package/js/src/delta.js +0 -6
  618. package/js/src/deribit.js +0 -6
  619. package/js/src/derive.d.ts +324 -0
  620. package/js/src/derive.js +2604 -0
  621. package/js/src/digifinex.js +0 -6
  622. package/js/src/ellipx.js +0 -6
  623. package/js/src/exmo.js +0 -6
  624. package/js/src/fmfwio.js +0 -6
  625. package/js/src/gate.js +6 -7
  626. package/js/src/gateio.js +0 -6
  627. package/js/src/gemini.js +0 -6
  628. package/js/src/hashkey.js +0 -6
  629. package/js/src/hitbtc.js +0 -6
  630. package/js/src/hollaex.js +0 -6
  631. package/js/src/htx.js +21 -11
  632. package/js/src/huobi.js +0 -6
  633. package/js/src/huobijp.js +0 -6
  634. package/js/src/hyperliquid.js +0 -6
  635. package/js/src/idex.js +0 -6
  636. package/js/src/independentreserve.js +0 -6
  637. package/js/src/indodax.js +0 -6
  638. package/js/src/kraken.js +0 -6
  639. package/js/src/krakenfutures.js +0 -6
  640. package/js/src/kucoin.js +0 -6
  641. package/js/src/kucoinfutures.js +0 -6
  642. package/js/src/kuna.js +0 -6
  643. package/js/src/latoken.js +0 -6
  644. package/js/src/lbank.js +0 -6
  645. package/js/src/luno.d.ts +25 -1
  646. package/js/src/luno.js +112 -6
  647. package/js/src/mercado.js +0 -6
  648. package/js/src/mexc.js +0 -6
  649. package/js/src/myokx.js +0 -6
  650. package/js/src/ndax.js +0 -6
  651. package/js/src/novadax.js +0 -6
  652. package/js/src/oceanex.js +0 -6
  653. package/js/src/okcoin.js +0 -6
  654. package/js/src/okx.js +0 -6
  655. package/js/src/onetrading.js +0 -6
  656. package/js/src/oxfun.js +0 -6
  657. package/js/src/p2b.js +0 -6
  658. package/js/src/paradex.js +0 -6
  659. package/js/src/paymium.js +0 -6
  660. package/js/src/phemex.js +0 -6
  661. package/js/src/poloniex.js +0 -6
  662. package/js/src/poloniexfutures.js +0 -6
  663. package/js/src/pro/alpaca.js +0 -6
  664. package/js/src/pro/ascendex.js +0 -6
  665. package/js/src/pro/bequant.js +0 -6
  666. package/js/src/pro/binance.js +0 -6
  667. package/js/src/pro/binancecoinm.js +0 -6
  668. package/js/src/pro/binanceus.js +0 -6
  669. package/js/src/pro/binanceusdm.js +0 -6
  670. package/js/src/pro/bingx.js +0 -6
  671. package/js/src/pro/bitcoincom.js +0 -6
  672. package/js/src/pro/bitfinex.js +0 -6
  673. package/js/src/pro/bitfinex1.js +0 -6
  674. package/js/src/pro/bitget.js +0 -6
  675. package/js/src/pro/bithumb.js +0 -6
  676. package/js/src/pro/bitmart.js +0 -6
  677. package/js/src/pro/bitmex.js +0 -6
  678. package/js/src/pro/bitopro.js +0 -6
  679. package/js/src/pro/bitpanda.js +0 -6
  680. package/js/src/pro/bitrue.js +0 -6
  681. package/js/src/pro/bitstamp.js +0 -6
  682. package/js/src/pro/bitvavo.js +0 -6
  683. package/js/src/pro/blockchaincom.js +0 -6
  684. package/js/src/pro/blofin.js +0 -6
  685. package/js/src/pro/bybit.js +0 -6
  686. package/js/src/pro/cex.js +0 -6
  687. package/js/src/pro/coinbase.js +0 -6
  688. package/js/src/pro/coinbaseadvanced.js +0 -6
  689. package/js/src/pro/coinbaseexchange.js +0 -6
  690. package/js/src/pro/coinbaseinternational.js +0 -6
  691. package/js/src/pro/coincatch.js +0 -6
  692. package/js/src/pro/coincheck.js +0 -6
  693. package/js/src/pro/coinex.js +0 -6
  694. package/js/src/pro/coinone.js +0 -6
  695. package/js/src/pro/cryptocom.js +0 -6
  696. package/js/src/pro/defx.js +0 -6
  697. package/js/src/pro/deribit.js +0 -6
  698. package/js/src/pro/derive.d.ts +100 -0
  699. package/js/src/pro/derive.js +747 -0
  700. package/js/src/pro/exmo.js +0 -6
  701. package/js/src/pro/gate.js +1 -6
  702. package/js/src/pro/gateio.js +0 -6
  703. package/js/src/pro/gemini.js +0 -6
  704. package/js/src/pro/hashkey.js +0 -6
  705. package/js/src/pro/hitbtc.js +0 -6
  706. package/js/src/pro/hollaex.js +0 -6
  707. package/js/src/pro/htx.js +0 -6
  708. package/js/src/pro/huobi.js +0 -6
  709. package/js/src/pro/huobijp.js +0 -6
  710. package/js/src/pro/hyperliquid.js +0 -6
  711. package/js/src/pro/idex.js +0 -6
  712. package/js/src/pro/independentreserve.js +0 -6
  713. package/js/src/pro/kraken.js +0 -6
  714. package/js/src/pro/krakenfutures.js +0 -6
  715. package/js/src/pro/kucoin.js +0 -6
  716. package/js/src/pro/kucoinfutures.js +0 -6
  717. package/js/src/pro/lbank.js +0 -6
  718. package/js/src/pro/luno.js +0 -6
  719. package/js/src/pro/mexc.js +0 -6
  720. package/js/src/pro/myokx.js +0 -6
  721. package/js/src/pro/ndax.js +0 -6
  722. package/js/src/pro/okcoin.js +0 -6
  723. package/js/src/pro/okx.js +0 -6
  724. package/js/src/pro/onetrading.js +0 -6
  725. package/js/src/pro/oxfun.js +0 -6
  726. package/js/src/pro/p2b.js +0 -6
  727. package/js/src/pro/paradex.js +0 -6
  728. package/js/src/pro/phemex.js +0 -6
  729. package/js/src/pro/poloniex.js +0 -6
  730. package/js/src/pro/poloniexfutures.js +0 -6
  731. package/js/src/pro/probit.js +0 -6
  732. package/js/src/pro/upbit.js +0 -6
  733. package/js/src/pro/vertex.js +0 -6
  734. package/js/src/pro/whitebit.js +0 -6
  735. package/js/src/pro/woo.js +0 -6
  736. package/js/src/pro/woofipro.js +0 -6
  737. package/js/src/pro/xt.js +0 -6
  738. package/js/src/probit.js +0 -6
  739. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  740. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  741. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  742. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  743. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  744. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  745. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  746. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  747. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  748. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  749. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  750. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  751. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  752. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  753. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  754. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  755. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  756. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  757. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  758. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  759. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  760. package/js/src/static_dependencies/ethers/index.js +0 -6
  761. package/js/src/static_dependencies/ethers/interface.js +0 -6
  762. package/js/src/static_dependencies/ethers/typed.js +0 -6
  763. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  764. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  765. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  766. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  767. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  768. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  769. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  770. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  771. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  772. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  773. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  774. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  775. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  776. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  777. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  778. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  779. package/js/src/static_dependencies/fflake/browser.js +0 -6
  780. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  781. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  782. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  783. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  784. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  785. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  786. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  787. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  788. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  789. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  790. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  791. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  792. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  793. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  794. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  795. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  796. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  797. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  798. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  799. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  800. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  801. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  802. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  803. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  804. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  805. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  806. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  807. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  808. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  809. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  810. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  811. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  812. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  813. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  814. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  815. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  816. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  817. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  818. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  819. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  820. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  821. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  822. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  823. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  824. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  825. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  826. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  827. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  828. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  829. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  830. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  831. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  832. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  833. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  834. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  835. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  836. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  837. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  838. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  839. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  840. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  841. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  842. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  843. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  844. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  845. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  846. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  847. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  848. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  849. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  850. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  851. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  852. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  853. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  854. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  855. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  856. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  857. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  858. package/js/src/static_dependencies/qs/index.cjs +0 -6
  859. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  860. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  861. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  862. package/js/src/static_dependencies/scure-base/index.js +0 -6
  863. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  864. package/js/src/static_dependencies/starknet/constants.js +0 -6
  865. package/js/src/static_dependencies/starknet/index.js +0 -6
  866. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  867. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  868. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  869. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  870. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  871. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  872. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  873. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  874. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  875. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  876. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  877. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  878. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  879. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  880. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  881. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  882. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  883. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  884. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  885. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  886. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  887. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  888. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  889. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  890. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  891. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  892. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  893. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  894. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  895. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  896. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  897. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  898. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  899. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  900. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  901. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  902. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  903. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  904. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  905. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  906. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  907. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  908. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  909. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  910. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  911. package/js/src/timex.js +0 -6
  912. package/js/src/tokocrypto.js +0 -6
  913. package/js/src/tradeogre.d.ts +24 -1
  914. package/js/src/tradeogre.js +137 -18
  915. package/js/src/upbit.js +0 -6
  916. package/js/src/vertex.js +0 -6
  917. package/js/src/wavesexchange.js +0 -6
  918. package/js/src/whitebit.d.ts +66 -1
  919. package/js/src/whitebit.js +282 -7
  920. package/js/src/woo.js +0 -6
  921. package/js/src/woofipro.js +0 -6
  922. package/js/src/xt.js +0 -6
  923. package/js/src/yobit.js +0 -6
  924. package/js/src/zaif.js +0 -6
  925. package/js/src/zonda.js +0 -6
  926. package/package.json +4 -4
@@ -0,0 +1,2611 @@
1
+ 'use strict';
2
+
3
+ require('../ccxt.js');
4
+ var derive$1 = require('./abstract/derive.js');
5
+ var number = require('./base/functions/number.js');
6
+ var sha3 = require('./static_dependencies/noble-hashes/sha3.js');
7
+ var secp256k1 = require('./static_dependencies/noble-curves/secp256k1.js');
8
+ var crypto = require('./base/functions/crypto.js');
9
+ var errors = require('./base/errors.js');
10
+ var Precise = require('./base/Precise.js');
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class derive
16
+ * @augments Exchange
17
+ */
18
+ class derive extends derive$1 {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'derive',
22
+ 'name': 'derive',
23
+ 'countries': [],
24
+ 'version': 'v1',
25
+ 'rateLimit': 50,
26
+ 'certified': false,
27
+ 'pro': true,
28
+ 'dex': true,
29
+ 'has': {
30
+ 'CORS': undefined,
31
+ 'spot': false,
32
+ 'margin': false,
33
+ 'swap': false,
34
+ 'future': false,
35
+ 'option': false,
36
+ 'addMargin': false,
37
+ 'borrowCrossMargin': false,
38
+ 'borrowIsolatedMargin': false,
39
+ 'cancelAllOrders': true,
40
+ 'cancelAllOrdersAfter': false,
41
+ 'cancelOrder': true,
42
+ 'cancelOrders': false,
43
+ 'cancelOrdersForSymbols': false,
44
+ 'closeAllPositions': false,
45
+ 'closePosition': false,
46
+ 'createMarketBuyOrderWithCost': false,
47
+ 'createMarketOrderWithCost': false,
48
+ 'createMarketSellOrderWithCost': false,
49
+ 'createOrder': true,
50
+ 'createOrders': false,
51
+ 'createReduceOnlyOrder': false,
52
+ 'createStopOrder': false,
53
+ 'createTriggerOrder': false,
54
+ 'editOrder': true,
55
+ 'fetchAccounts': false,
56
+ 'fetchBalance': true,
57
+ 'fetchBorrowInterest': false,
58
+ 'fetchBorrowRateHistories': false,
59
+ 'fetchBorrowRateHistory': false,
60
+ 'fetchCanceledAndClosedOrders': false,
61
+ 'fetchCanceledOrders': true,
62
+ 'fetchClosedOrders': true,
63
+ 'fetchCrossBorrowRate': false,
64
+ 'fetchCrossBorrowRates': false,
65
+ 'fetchCurrencies': true,
66
+ 'fetchDepositAddress': false,
67
+ 'fetchDepositAddresses': false,
68
+ 'fetchDeposits': true,
69
+ 'fetchDepositWithdrawFee': 'emulated',
70
+ 'fetchDepositWithdrawFees': false,
71
+ 'fetchFundingHistory': true,
72
+ 'fetchFundingRate': true,
73
+ 'fetchFundingRateHistory': true,
74
+ 'fetchFundingRates': false,
75
+ 'fetchIndexOHLCV': false,
76
+ 'fetchIsolatedBorrowRate': false,
77
+ 'fetchIsolatedBorrowRates': false,
78
+ 'fetchLedger': true,
79
+ 'fetchLeverage': false,
80
+ 'fetchLeverageTiers': false,
81
+ 'fetchLiquidations': false,
82
+ 'fetchMarginMode': undefined,
83
+ 'fetchMarketLeverageTiers': false,
84
+ 'fetchMarkets': true,
85
+ 'fetchMarkOHLCV': false,
86
+ 'fetchMyLiquidations': false,
87
+ 'fetchMyTrades': true,
88
+ 'fetchOHLCV': false,
89
+ 'fetchOpenInterest': false,
90
+ 'fetchOpenInterestHistory': false,
91
+ 'fetchOpenInterests': false,
92
+ 'fetchOpenOrders': true,
93
+ 'fetchOrder': false,
94
+ 'fetchOrderBook': false,
95
+ 'fetchOrders': true,
96
+ 'fetchOrderTrades': true,
97
+ 'fetchPosition': false,
98
+ 'fetchPositionMode': false,
99
+ 'fetchPositions': true,
100
+ 'fetchPositionsRisk': false,
101
+ 'fetchPremiumIndexOHLCV': false,
102
+ 'fetchTicker': true,
103
+ 'fetchTickers': false,
104
+ 'fetchTime': true,
105
+ 'fetchTrades': true,
106
+ 'fetchTradingFee': false,
107
+ 'fetchTradingFees': false,
108
+ 'fetchTransfer': false,
109
+ 'fetchTransfers': false,
110
+ 'fetchWithdrawal': false,
111
+ 'fetchWithdrawals': true,
112
+ 'reduceMargin': false,
113
+ 'repayCrossMargin': false,
114
+ 'repayIsolatedMargin': false,
115
+ 'sandbox': true,
116
+ 'setLeverage': false,
117
+ 'setMarginMode': false,
118
+ 'setPositionMode': false,
119
+ 'transfer': false,
120
+ 'withdraw': false,
121
+ },
122
+ 'timeframes': {
123
+ '1m': '1m',
124
+ '3m': '3m',
125
+ '5m': '5m',
126
+ '15m': '15m',
127
+ '30m': '30m',
128
+ '1h': '1h',
129
+ '2h': '2h',
130
+ '4h': '4h',
131
+ '8h': '8h',
132
+ '12h': '12h',
133
+ '1d': '1d',
134
+ '3d': '3d',
135
+ '1w': '1w',
136
+ '1M': '1M',
137
+ },
138
+ 'hostname': 'derive.xyz',
139
+ 'urls': {
140
+ 'logo': 'https://github.com/user-attachments/assets/f835b95f-033a-43dd-b6bb-24e698fc498c',
141
+ 'api': {
142
+ 'public': 'https://api.lyra.finance/public',
143
+ 'private': 'https://api.lyra.finance/private',
144
+ },
145
+ 'test': {
146
+ 'public': 'https://api-demo.lyra.finance/public',
147
+ 'private': 'https://api-demo.lyra.finance/private',
148
+ },
149
+ 'www': 'https://www.derive.xyz/',
150
+ 'doc': 'https://docs.derive.xyz/docs/',
151
+ 'fees': 'https://docs.derive.xyz/reference/fees-1/',
152
+ 'referral': 'https://www.derive.xyz/invite/3VB0B',
153
+ },
154
+ 'api': {
155
+ 'public': {
156
+ 'get': [
157
+ 'get_all_currencies',
158
+ ],
159
+ 'post': [
160
+ 'build_register_session_key_tx',
161
+ 'register_session_key',
162
+ 'deregister_session_key',
163
+ 'login',
164
+ 'statistics',
165
+ 'get_all_currencies',
166
+ 'get_currency',
167
+ 'get_instrument',
168
+ 'get_all_instruments',
169
+ 'get_instruments',
170
+ 'get_ticker',
171
+ 'get_latest_signed_feeds',
172
+ 'get_option_settlement_prices',
173
+ 'get_spot_feed_history',
174
+ 'get_spot_feed_history_candles',
175
+ 'get_funding_rate_history',
176
+ 'get_trade_history',
177
+ 'get_option_settlement_history',
178
+ 'get_liquidation_history',
179
+ 'get_interest_rate_history',
180
+ 'get_transaction',
181
+ 'get_margin',
182
+ 'margin_watch',
183
+ 'validate_invite_code',
184
+ 'get_points',
185
+ 'get_all_points',
186
+ 'get_points_leaderboard',
187
+ 'get_descendant_tree',
188
+ 'get_tree_roots',
189
+ 'get_swell_percent_points',
190
+ 'get_vault_assets',
191
+ 'get_etherfi_effective_balances',
192
+ 'get_kelp_effective_balances',
193
+ 'get_bridge_balances',
194
+ 'get_ethena_participants',
195
+ 'get_vault_share',
196
+ 'get_vault_statistics',
197
+ 'get_vault_balances',
198
+ 'estimate_integrator_points',
199
+ 'create_subaccount_debug',
200
+ 'deposit_debug',
201
+ 'withdraw_debug',
202
+ 'send_quote_debug',
203
+ 'execute_quote_debug',
204
+ 'get_invite_code',
205
+ 'register_invite',
206
+ 'get_time',
207
+ 'get_live_incidents',
208
+ 'get_maker_programs',
209
+ 'get_maker_program_scores',
210
+ ],
211
+ },
212
+ 'private': {
213
+ 'post': [
214
+ 'get_account',
215
+ 'create_subaccount',
216
+ 'get_subaccount',
217
+ 'get_subaccounts',
218
+ 'get_all_portfolios',
219
+ 'change_subaccount_label',
220
+ 'get_notificationsv',
221
+ 'update_notifications',
222
+ 'deposit',
223
+ 'withdraw',
224
+ 'transfer_erc20',
225
+ 'transfer_position',
226
+ 'transfer_positions',
227
+ 'order',
228
+ 'replace',
229
+ 'order_debug',
230
+ 'get_order',
231
+ 'get_orders',
232
+ 'get_open_orders',
233
+ 'cancel',
234
+ 'cancel_by_label',
235
+ 'cancel_by_nonce',
236
+ 'cancel_by_instrument',
237
+ 'cancel_all',
238
+ 'cancel_trigger_order',
239
+ 'get_order_history',
240
+ 'get_trade_history',
241
+ 'get_deposit_history',
242
+ 'get_withdrawal_history',
243
+ 'send_rfq',
244
+ 'cancel_rfq',
245
+ 'cancel_batch_rfqs',
246
+ 'get_rfqs',
247
+ 'poll_rfqs',
248
+ 'send_quote',
249
+ 'cancel_quote',
250
+ 'cancel_batch_quotes',
251
+ 'get_quotes',
252
+ 'poll_quotes',
253
+ 'execute_quote',
254
+ 'rfq_get_best_quote',
255
+ 'get_margin',
256
+ 'get_collaterals',
257
+ 'get_positions',
258
+ 'get_option_settlement_history',
259
+ 'get_subaccount_value_history',
260
+ 'expired_and_cancelled_history',
261
+ 'get_funding_history',
262
+ 'get_interest_history',
263
+ 'get_erc20_transfer_history',
264
+ 'get_liquidation_history',
265
+ 'liquidate',
266
+ 'get_liquidator_history',
267
+ 'session_keys',
268
+ 'edit_session_key',
269
+ 'register_scoped_session_key',
270
+ 'get_mmp_config',
271
+ 'set_mmp_config',
272
+ 'reset_mmp',
273
+ 'set_cancel_on_disconnect',
274
+ 'get_invite_code',
275
+ 'register_invite',
276
+ ],
277
+ },
278
+ },
279
+ 'fees': {},
280
+ 'requiredCredentials': {
281
+ 'apiKey': false,
282
+ 'secret': false,
283
+ 'walletAddress': true,
284
+ 'privateKey': true,
285
+ },
286
+ 'exceptions': {
287
+ 'exact': {
288
+ '-32000': errors.RateLimitExceeded,
289
+ '-32100': errors.RateLimitExceeded,
290
+ '-32700': errors.BadRequest,
291
+ '-32600': errors.BadRequest,
292
+ '-32601': errors.BadRequest,
293
+ '-32602': errors.InvalidOrder,
294
+ '-32603': errors.InvalidOrder,
295
+ '9000': errors.InvalidOrder,
296
+ '10000': errors.BadRequest,
297
+ '10001': errors.BadRequest,
298
+ '10002': errors.BadRequest,
299
+ '10003': errors.BadRequest,
300
+ '10004': errors.InvalidOrder,
301
+ '10005': errors.BadRequest,
302
+ '10006': errors.BadRequest,
303
+ '10007': errors.BadRequest,
304
+ '10008': errors.BadRequest,
305
+ '10009': errors.BadRequest,
306
+ '10010': errors.InvalidOrder,
307
+ '10011': errors.InsufficientFunds,
308
+ '10012': errors.InsufficientFunds,
309
+ '10013': errors.ExchangeError,
310
+ '10014': errors.ExchangeError,
311
+ '11000': errors.InsufficientFunds,
312
+ '11002': errors.InvalidOrder,
313
+ '11003': errors.InvalidOrder,
314
+ '11004': errors.InvalidOrder,
315
+ '11005': errors.InvalidOrder,
316
+ '11006': errors.OrderNotFound,
317
+ '11007': errors.InvalidOrder,
318
+ '11008': errors.InvalidOrder,
319
+ '11009': errors.InvalidOrder,
320
+ '11010': errors.InvalidOrder,
321
+ '11011': errors.InvalidOrder,
322
+ '11012': errors.InvalidOrder,
323
+ '11013': errors.InvalidOrder,
324
+ '11014': errors.InvalidOrder,
325
+ '11015': errors.InvalidOrder,
326
+ '11016': errors.InvalidOrder,
327
+ '11017': errors.InvalidOrder,
328
+ '11018': errors.InvalidOrder,
329
+ '11019': errors.InvalidOrder,
330
+ '11020': errors.InsufficientFunds,
331
+ '11021': errors.InvalidOrder,
332
+ '11022': errors.InvalidOrder,
333
+ '11023': errors.InvalidOrder,
334
+ '11024': errors.InvalidOrder,
335
+ '11025': errors.InvalidOrder,
336
+ '11026': errors.BadRequest,
337
+ '11027': errors.InvalidOrder,
338
+ '11028': errors.InvalidOrder,
339
+ '11050': errors.InvalidOrder,
340
+ '11051': errors.InvalidOrder,
341
+ '11052': errors.InvalidOrder,
342
+ '11053': errors.InvalidOrder,
343
+ '11054': errors.InvalidOrder,
344
+ '11055': errors.InvalidOrder,
345
+ '11100': errors.InvalidOrder,
346
+ '11101': errors.InvalidOrder,
347
+ '11102': errors.InvalidOrder,
348
+ '11103': errors.InvalidOrder,
349
+ '11104': errors.InvalidOrder,
350
+ '11105': errors.InvalidOrder,
351
+ '11106': errors.InvalidOrder,
352
+ '11107': errors.InvalidOrder,
353
+ '11200': errors.InvalidOrder,
354
+ '11201': errors.InvalidOrder,
355
+ '11202': errors.InvalidOrder,
356
+ '11203': errors.InvalidOrder,
357
+ '12000': errors.InvalidOrder,
358
+ '12001': errors.InvalidOrder,
359
+ '12002': errors.BadRequest,
360
+ '12003': errors.BadRequest,
361
+ '13000': errors.BadRequest,
362
+ '14000': errors.BadRequest,
363
+ '14001': errors.InvalidOrder,
364
+ '14002': errors.BadRequest,
365
+ '14008': errors.BadRequest,
366
+ '14009': errors.BadRequest,
367
+ '14010': errors.BadRequest,
368
+ '14011': errors.BadRequest,
369
+ '14012': errors.BadRequest,
370
+ '14013': errors.BadRequest,
371
+ '14014': errors.InvalidOrder,
372
+ '14015': errors.BadRequest,
373
+ '14016': errors.BadRequest,
374
+ '14017': errors.BadRequest,
375
+ '14018': errors.BadRequest,
376
+ '14019': errors.BadRequest,
377
+ '14020': errors.BadRequest,
378
+ '14021': errors.BadRequest,
379
+ '14022': errors.AuthenticationError,
380
+ '14023': errors.InvalidOrder,
381
+ '14024': errors.BadRequest,
382
+ '14025': errors.BadRequest,
383
+ '14026': errors.BadRequest,
384
+ '14027': errors.AuthenticationError,
385
+ '14028': errors.BadRequest,
386
+ '14029': errors.AuthenticationError,
387
+ '14030': errors.BadRequest,
388
+ '14031': errors.AuthenticationError,
389
+ '14032': errors.BadRequest,
390
+ '16000': errors.AuthenticationError,
391
+ '16001': errors.AuthenticationError,
392
+ '16100': errors.AuthenticationError,
393
+ '17000': errors.BadRequest,
394
+ '17001': errors.BadRequest,
395
+ '17002': errors.BadRequest,
396
+ '17003': errors.BadRequest,
397
+ '17004': errors.BadRequest,
398
+ '17005': errors.BadRequest,
399
+ '17006': errors.BadRequest,
400
+ '17007': errors.BadRequest,
401
+ '18000': errors.BadRequest,
402
+ '18001': errors.BadRequest,
403
+ '18002': errors.BadRequest,
404
+ '18003': errors.BadRequest,
405
+ '18004': errors.BadRequest,
406
+ '18005': errors.BadRequest,
407
+ '18006': errors.BadRequest,
408
+ '18007': errors.BadRequest,
409
+ '19000': errors.BadRequest, // Maker program not found
410
+ },
411
+ 'broad': {},
412
+ },
413
+ 'precisionMode': number.TICK_SIZE,
414
+ 'commonCurrencies': {},
415
+ 'options': {
416
+ 'deriveWalletAddress': '',
417
+ 'id': '0x0ad42b8e602c2d3d475ae52d678cf63d84ab2749',
418
+ },
419
+ });
420
+ }
421
+ setSandboxMode(enable) {
422
+ super.setSandboxMode(enable);
423
+ this.options['sandboxMode'] = enable;
424
+ }
425
+ /**
426
+ * @method
427
+ * @name derive#fetchTime
428
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
429
+ * @see https://docs.derive.xyz/reference/post_public-get-time
430
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
431
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
432
+ */
433
+ async fetchTime(params = {}) {
434
+ const response = await this.publicPostGetTime(params);
435
+ //
436
+ // {
437
+ // "result": 1735846536758,
438
+ // "id": "f1c03d21-f886-4c5a-9a9d-33dd06f180f0"
439
+ // }
440
+ //
441
+ return this.safeInteger(response, 'result');
442
+ }
443
+ /**
444
+ * @method
445
+ * @name derive#fetchCurrencies
446
+ * @description fetches all available currencies on an exchange
447
+ * @see https://docs.derive.xyz/reference/post_public-get-all-currencies
448
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
449
+ * @returns {object} an associative dictionary of currencies
450
+ */
451
+ async fetchCurrencies(params = {}) {
452
+ const result = {};
453
+ const tokenResponse = await this.publicGetGetAllCurrencies(params);
454
+ //
455
+ // {
456
+ // "result": [
457
+ // {
458
+ // "currency": "USDC",
459
+ // "spot_price": "1.000066413299999872",
460
+ // "spot_price_24h": "1.000327785299999872"
461
+ // }
462
+ // ],
463
+ // "id": "7e07fe1d-0ab4-4d2b-9e22-b65ce9e232dc"
464
+ // }
465
+ //
466
+ const currencies = this.safeList(tokenResponse, 'result', []);
467
+ for (let i = 0; i < currencies.length; i++) {
468
+ const currency = currencies[i];
469
+ const currencyId = this.safeString(currency, 'currency');
470
+ const code = this.safeCurrencyCode(currencyId);
471
+ result[code] = {
472
+ 'id': currencyId,
473
+ 'name': undefined,
474
+ 'code': code,
475
+ 'precision': undefined,
476
+ 'active': undefined,
477
+ 'fee': undefined,
478
+ 'networks': undefined,
479
+ 'deposit': undefined,
480
+ 'withdraw': undefined,
481
+ 'limits': {
482
+ 'deposit': {
483
+ 'min': undefined,
484
+ 'max': undefined,
485
+ },
486
+ 'withdraw': {
487
+ 'min': undefined,
488
+ 'max': undefined,
489
+ },
490
+ },
491
+ 'info': currency,
492
+ };
493
+ }
494
+ return result;
495
+ }
496
+ /**
497
+ * @method
498
+ * @name derive#fetchMarkets
499
+ * @description retrieves data on all markets for bybit
500
+ * @see https://docs.derive.xyz/reference/post_public-get-all-instruments
501
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
502
+ * @returns {object[]} an array of objects representing market data
503
+ */
504
+ async fetchMarkets(params = {}) {
505
+ const spotMarketsPromise = this.fetchSpotMarkets(params);
506
+ const swapMarketsPromise = this.fetchSwapMarkets(params);
507
+ const optionMarketsPromise = this.fetchOptionMarkets(params);
508
+ const [spotMarkets, swapMarkets, optionMarkets] = await Promise.all([spotMarketsPromise, swapMarketsPromise, optionMarketsPromise]);
509
+ //
510
+ // {
511
+ // "result": {
512
+ // "instruments": [
513
+ // {
514
+ // "instrument_type": "perp",
515
+ // "instrument_name": "BTC-PERP",
516
+ // "scheduled_activation": 1701840228,
517
+ // "scheduled_deactivation": 9223372036854776000,
518
+ // "is_active": true,
519
+ // "tick_size": "0.1",
520
+ // "minimum_amount": "0.01",
521
+ // "maximum_amount": "10000",
522
+ // "amount_step": "0.001",
523
+ // "mark_price_fee_rate_cap": "0",
524
+ // "maker_fee_rate": "0.00005",
525
+ // "taker_fee_rate": "0.0003",
526
+ // "base_fee": "0.1",
527
+ // "base_currency": "BTC",
528
+ // "quote_currency": "USD",
529
+ // "option_details": null,
530
+ // "perp_details": {
531
+ // "index": "BTC-USD",
532
+ // "max_rate_per_hour": "0.004",
533
+ // "min_rate_per_hour": "-0.004",
534
+ // "static_interest_rate": "0.0000125",
535
+ // "aggregate_funding": "10538.574363381759146829",
536
+ // "funding_rate": "0.0000125"
537
+ // },
538
+ // "erc20_details": null,
539
+ // "base_asset_address": "0xDBa83C0C654DB1cd914FA2710bA743e925B53086",
540
+ // "base_asset_sub_id": "0",
541
+ // "pro_rata_fraction": "0",
542
+ // "fifo_min_allocation": "0",
543
+ // "pro_rata_amount_step": "0.1"
544
+ // }
545
+ // ],
546
+ // "pagination": {
547
+ // "num_pages": 1,
548
+ // "count": 1
549
+ // }
550
+ // },
551
+ // "id": "a06bc0b2-8e78-4536-a21f-f785f225b5a5"
552
+ // }
553
+ //
554
+ let result = this.arrayConcat(spotMarkets, swapMarkets);
555
+ result = this.arrayConcat(result, optionMarkets);
556
+ return result;
557
+ }
558
+ async fetchSpotMarkets(params = {}) {
559
+ const request = {
560
+ 'expired': false,
561
+ 'instrument_type': 'erc20',
562
+ };
563
+ const response = await this.publicPostGetAllInstruments(this.extend(request, params));
564
+ const result = this.safeDict(response, 'result', {});
565
+ const data = this.safeList(result, 'instruments', []);
566
+ return this.parseMarkets(data);
567
+ }
568
+ async fetchSwapMarkets(params = {}) {
569
+ const request = {
570
+ 'expired': false,
571
+ 'instrument_type': 'perp',
572
+ };
573
+ const response = await this.publicPostGetAllInstruments(this.extend(request, params));
574
+ const result = this.safeDict(response, 'result', {});
575
+ const data = this.safeList(result, 'instruments', []);
576
+ return this.parseMarkets(data);
577
+ }
578
+ async fetchOptionMarkets(params = {}) {
579
+ const request = {
580
+ 'expired': false,
581
+ 'instrument_type': 'option',
582
+ };
583
+ const response = await this.publicPostGetAllInstruments(this.extend(request, params));
584
+ const result = this.safeDict(response, 'result', {});
585
+ const data = this.safeList(result, 'instruments', []);
586
+ return this.parseMarkets(data);
587
+ }
588
+ parseMarket(market) {
589
+ const type = this.safeString(market, 'instrument_type');
590
+ let marketType;
591
+ let spot = false;
592
+ let margin = true;
593
+ let swap = false;
594
+ let option = false;
595
+ let linear = undefined;
596
+ const baseId = this.safeString(market, 'base_currency');
597
+ const quoteId = this.safeString(market, 'quote_currency');
598
+ const base = this.safeCurrencyCode(baseId);
599
+ const quote = this.safeCurrencyCode(quoteId);
600
+ const marketId = this.safeString(market, 'instrument_name');
601
+ let symbol = base + '/' + quote;
602
+ let settleId = undefined;
603
+ let settle = undefined;
604
+ let expiry = undefined;
605
+ let strike = undefined;
606
+ let optionType = undefined;
607
+ let optionLetter = undefined;
608
+ if (type === 'erc20') {
609
+ spot = true;
610
+ marketType = 'spot';
611
+ }
612
+ else if (type === 'perp') {
613
+ margin = false;
614
+ settleId = 'USDC';
615
+ settle = this.safeCurrencyCode(settleId);
616
+ symbol = base + '/' + quote + ':' + settle;
617
+ swap = true;
618
+ linear = true;
619
+ marketType = 'swap';
620
+ }
621
+ else if (type === 'option') {
622
+ settleId = 'USDC';
623
+ settle = this.safeCurrencyCode(settleId);
624
+ margin = false;
625
+ option = true;
626
+ marketType = 'option';
627
+ const optionDetails = this.safeDict(market, 'option_details');
628
+ expiry = this.safeTimestamp(optionDetails, 'expiry');
629
+ strike = this.safeInteger(optionDetails, 'strike');
630
+ optionLetter = this.safeString(optionDetails, 'option_type');
631
+ symbol = base + '/' + quote + ':' + settle + '-' + this.yymmdd(expiry) + '-' + this.numberToString(strike) + '-' + optionLetter;
632
+ if (optionLetter === 'P') {
633
+ optionType = 'put';
634
+ }
635
+ else {
636
+ optionType = 'call';
637
+ }
638
+ }
639
+ return this.safeMarketStructure({
640
+ 'id': marketId,
641
+ 'symbol': symbol,
642
+ 'base': base,
643
+ 'quote': quote,
644
+ 'settle': settle,
645
+ 'baseId': baseId,
646
+ 'quoteId': quoteId,
647
+ 'settleId': settleId,
648
+ 'type': marketType,
649
+ 'spot': spot,
650
+ 'margin': margin,
651
+ 'swap': swap,
652
+ 'future': false,
653
+ 'option': option,
654
+ 'active': this.safeBool(market, 'is_active'),
655
+ 'contract': (swap || option),
656
+ 'linear': linear,
657
+ 'inverse': undefined,
658
+ 'contractSize': (spot) ? undefined : 1,
659
+ 'expiry': expiry,
660
+ 'expiryDatetime': this.iso8601(expiry),
661
+ 'taker': this.safeNumber(market, 'taker_fee_rate'),
662
+ 'maker': this.safeNumber(market, 'maker_fee_rate'),
663
+ 'strike': strike,
664
+ 'optionType': optionType,
665
+ 'precision': {
666
+ 'amount': this.safeNumber(market, 'amount_step'),
667
+ 'price': this.safeNumber(market, 'tick_size'),
668
+ },
669
+ 'limits': {
670
+ 'leverage': {
671
+ 'min': undefined,
672
+ 'max': undefined,
673
+ },
674
+ 'amount': {
675
+ 'min': this.safeNumber(market, 'minimum_amount'),
676
+ 'max': this.safeNumber(market, 'maximum_amount'),
677
+ },
678
+ 'price': {
679
+ 'min': undefined,
680
+ 'max': undefined,
681
+ },
682
+ 'cost': {
683
+ 'min': undefined,
684
+ 'max': undefined,
685
+ },
686
+ },
687
+ 'created': undefined,
688
+ 'info': market,
689
+ });
690
+ }
691
+ /**
692
+ * @method
693
+ * @name derive#fetchTicker
694
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
695
+ * @see https://docs.derive.xyz/reference/post_public-get-ticker
696
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
697
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
698
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
699
+ */
700
+ async fetchTicker(symbol, params = {}) {
701
+ await this.loadMarkets();
702
+ const market = this.market(symbol);
703
+ const request = {
704
+ 'instrument_name': market['id'],
705
+ };
706
+ const response = await this.publicPostGetTicker(this.extend(request, params));
707
+ //
708
+ // spot
709
+ //
710
+ // {
711
+ // "result": {
712
+ // "instrument_type": "perp",
713
+ // "instrument_name": "BTC-PERP",
714
+ // "scheduled_activation": 1701840228,
715
+ // "scheduled_deactivation": 9223372036854776000,
716
+ // "is_active": true,
717
+ // "tick_size": "0.1",
718
+ // "minimum_amount": "0.01",
719
+ // "maximum_amount": "10000",
720
+ // "amount_step": "0.001",
721
+ // "mark_price_fee_rate_cap": "0",
722
+ // "maker_fee_rate": "0.00005",
723
+ // "taker_fee_rate": "0.0003",
724
+ // "base_fee": "0.1",
725
+ // "base_currency": "BTC",
726
+ // "quote_currency": "USD",
727
+ // "option_details": null,
728
+ // "perp_details": {
729
+ // "index": "BTC-USD",
730
+ // "max_rate_per_hour": "0.004",
731
+ // "min_rate_per_hour": "-0.004",
732
+ // "static_interest_rate": "0.0000125",
733
+ // "aggregate_funding": "10512.580833189805742522",
734
+ // "funding_rate": "-0.000022223906766867"
735
+ // },
736
+ // "erc20_details": null,
737
+ // "base_asset_address": "0xDBa83C0C654DB1cd914FA2710bA743e925B53086",
738
+ // "base_asset_sub_id": "0",
739
+ // "pro_rata_fraction": "0",
740
+ // "fifo_min_allocation": "0",
741
+ // "pro_rata_amount_step": "0.1",
742
+ // "best_ask_amount": "0.012",
743
+ // "best_ask_price": "99567.9",
744
+ // "best_bid_amount": "0.129",
745
+ // "best_bid_price": "99554.5",
746
+ // "five_percent_bid_depth": "11.208",
747
+ // "five_percent_ask_depth": "11.42",
748
+ // "option_pricing": null,
749
+ // "index_price": "99577.2",
750
+ // "mark_price": "99543.642926357933902181684970855712890625",
751
+ // "stats": {
752
+ // "contract_volume": "464.712",
753
+ // "num_trades": "10681",
754
+ // "open_interest": "72.804739389481989861",
755
+ // "high": "99519.1",
756
+ // "low": "97254.1",
757
+ // "percent_change": "0.0128",
758
+ // "usd_change": "1258.1"
759
+ // },
760
+ // "timestamp": 1736140984000,
761
+ // "min_price": "97591.2",
762
+ // "max_price": "101535.1"
763
+ // },
764
+ // "id": "bbd7c271-c2be-48f7-b93a-26cf6d4cb79f"
765
+ // }
766
+ //
767
+ const data = this.safeDict(response, 'result', {});
768
+ return this.parseTicker(data, market);
769
+ }
770
+ parseTicker(ticker, market = undefined) {
771
+ //
772
+ // {
773
+ // "instrument_type": "perp",
774
+ // "instrument_name": "BTC-PERP",
775
+ // "scheduled_activation": 1701840228,
776
+ // "scheduled_deactivation": 9223372036854776000,
777
+ // "is_active": true,
778
+ // "tick_size": "0.1",
779
+ // "minimum_amount": "0.01",
780
+ // "maximum_amount": "10000",
781
+ // "amount_step": "0.001",
782
+ // "mark_price_fee_rate_cap": "0",
783
+ // "maker_fee_rate": "0.00005",
784
+ // "taker_fee_rate": "0.0003",
785
+ // "base_fee": "0.1",
786
+ // "base_currency": "BTC",
787
+ // "quote_currency": "USD",
788
+ // "option_details": null,
789
+ // "perp_details": {
790
+ // "index": "BTC-USD",
791
+ // "max_rate_per_hour": "0.004",
792
+ // "min_rate_per_hour": "-0.004",
793
+ // "static_interest_rate": "0.0000125",
794
+ // "aggregate_funding": "10512.580833189805742522",
795
+ // "funding_rate": "-0.000022223906766867"
796
+ // },
797
+ // "erc20_details": null,
798
+ // "base_asset_address": "0xDBa83C0C654DB1cd914FA2710bA743e925B53086",
799
+ // "base_asset_sub_id": "0",
800
+ // "pro_rata_fraction": "0",
801
+ // "fifo_min_allocation": "0",
802
+ // "pro_rata_amount_step": "0.1",
803
+ // "best_ask_amount": "0.012",
804
+ // "best_ask_price": "99567.9",
805
+ // "best_bid_amount": "0.129",
806
+ // "best_bid_price": "99554.5",
807
+ // "five_percent_bid_depth": "11.208",
808
+ // "five_percent_ask_depth": "11.42",
809
+ // "option_pricing": null,
810
+ // "index_price": "99577.2",
811
+ // "mark_price": "99543.642926357933902181684970855712890625",
812
+ // "stats": {
813
+ // "contract_volume": "464.712",
814
+ // "num_trades": "10681",
815
+ // "open_interest": "72.804739389481989861",
816
+ // "high": "99519.1",
817
+ // "low": "97254.1",
818
+ // "percent_change": "0.0128",
819
+ // "usd_change": "1258.1"
820
+ // },
821
+ // "timestamp": 1736140984000,
822
+ // "min_price": "97591.2",
823
+ // "max_price": "101535.1"
824
+ // }
825
+ //
826
+ const marketId = this.safeString(ticker, 'instrument_name');
827
+ const timestamp = this.safeIntegerOmitZero(ticker, 'timestamp');
828
+ const symbol = this.safeSymbol(marketId, market);
829
+ const stats = this.safeDict(ticker, 'stats');
830
+ const change = this.safeString(stats, 'percent_change');
831
+ return this.safeTicker({
832
+ 'symbol': symbol,
833
+ 'timestamp': timestamp,
834
+ 'datetime': this.iso8601(timestamp),
835
+ 'high': this.safeString(stats, 'high'),
836
+ 'low': this.safeString(stats, 'low'),
837
+ 'bid': this.safeString(ticker, 'best_bid_price'),
838
+ 'bidVolume': this.safeString(ticker, 'best_bid_amount'),
839
+ 'ask': this.safeString(ticker, 'best_ask_price'),
840
+ 'askVolume': this.safeString(ticker, 'best_ask_amount'),
841
+ 'vwap': undefined,
842
+ 'open': undefined,
843
+ 'close': undefined,
844
+ 'last': undefined,
845
+ 'previousClose': undefined,
846
+ 'change': change,
847
+ 'percentage': Precise["default"].stringMul(change, '100'),
848
+ 'average': undefined,
849
+ 'baseVolume': undefined,
850
+ 'quoteVolume': undefined,
851
+ 'indexPrice': this.safeString(ticker, 'index_price'),
852
+ 'markPrice': this.safeString(ticker, 'mark_price'),
853
+ 'info': ticker,
854
+ }, market);
855
+ }
856
+ /**
857
+ * @method
858
+ * @name derive#fetchTrades
859
+ * @description get the list of most recent trades for a particular symbol
860
+ * @see https://docs.derive.xyz/reference/post_public-get-trade-history
861
+ * @param {string} symbol unified symbol of the market to fetch trades for
862
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
863
+ * @param {int} [limit] the maximum amount of trades to fetch
864
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
865
+ * @param {int} [params.until] the latest time in ms to fetch trades for
866
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
867
+ */
868
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
869
+ await this.loadMarkets();
870
+ const request = {};
871
+ let market = undefined;
872
+ if (symbol !== undefined) {
873
+ market = this.market(symbol);
874
+ request['instrument_name'] = market['id'];
875
+ }
876
+ if (limit !== undefined) {
877
+ if (limit > 1000) {
878
+ limit = 1000;
879
+ }
880
+ request['page_size'] = limit; // default 100, max 1000
881
+ }
882
+ if (since !== undefined) {
883
+ request['from_timestamp'] = since;
884
+ }
885
+ const until = this.safeInteger(params, 'until');
886
+ params = this.omit(params, ['until']);
887
+ if (until !== undefined) {
888
+ request['to_timestamp'] = until;
889
+ }
890
+ const response = await this.publicPostGetTradeHistory(this.extend(request, params));
891
+ //
892
+ // {
893
+ // "result": {
894
+ // "trades": [
895
+ // {
896
+ // "trade_id": "9dbc88b0-f0c4-4439-9cc1-4e6409d4eafb",
897
+ // "instrument_name": "BTC-PERP",
898
+ // "timestamp": 1736153910930,
899
+ // "trade_price": "98995.3",
900
+ // "trade_amount": "0.033",
901
+ // "mark_price": "98990.875914388161618263",
902
+ // "index_price": "99038.050611100001501184",
903
+ // "direction": "sell",
904
+ // "quote_id": null,
905
+ // "wallet": "0x88B6BB87fbFac92a34F8155aaA35c87B5b166fA9",
906
+ // "subaccount_id": 8250,
907
+ // "tx_status": "settled",
908
+ // "tx_hash": "0x020bd735b312f867f17f8cc254946d87cfe9f2c8ff3605035d8129082eb73723",
909
+ // "trade_fee": "0.980476701049890015",
910
+ // "liquidity_role": "taker",
911
+ // "realized_pnl": "-2.92952402688793509",
912
+ // "realized_pnl_excl_fees": "-1.949047325838045075"
913
+ // }
914
+ // ],
915
+ // "pagination": {
916
+ // "num_pages": 598196,
917
+ // "count": 598196
918
+ // }
919
+ // },
920
+ // "id": "b8539544-6975-4497-8163-5e51a38e4aa7"
921
+ // }
922
+ //
923
+ const result = this.safeDict(response, 'result', {});
924
+ const data = this.safeList(result, 'trades', []);
925
+ return this.parseTrades(data, market, since, limit);
926
+ }
927
+ parseTrade(trade, market = undefined) {
928
+ //
929
+ // {
930
+ // "subaccount_id": 130837,
931
+ // "order_id": "30c48194-8d48-43ac-ad00-0d5ba29eddc9",
932
+ // "instrument_name": "BTC-PERP",
933
+ // "direction": "sell",
934
+ // "label": "test1234",
935
+ // "quote_id": null,
936
+ // "trade_id": "f8a30740-488c-4c2d-905d-e17057bafde1",
937
+ // "timestamp": 1738065303708,
938
+ // "mark_price": "102740.137375457314192317",
939
+ // "index_price": "102741.553409299981533184",
940
+ // "trade_price": "102700.6",
941
+ // "trade_amount": "0.01",
942
+ // "liquidity_role": "taker",
943
+ // "realized_pnl": "0",
944
+ // "realized_pnl_excl_fees": "0",
945
+ // "is_transfer": false,
946
+ // "tx_status": "settled",
947
+ // "trade_fee": "1.127415534092999815",
948
+ // "tx_hash": "0xc55df1f07330faf86579bd8a6385391fbe9e73089301149d8550e9d29c9ead74",
949
+ // "transaction_id": "e18b9426-3fa5-41bb-99d3-8b54fb4d51bb"
950
+ // }
951
+ //
952
+ const marketId = this.safeString(trade, 'instrument_name');
953
+ const symbol = this.safeSymbol(marketId, market);
954
+ const timestamp = this.safeInteger(trade, 'timestamp');
955
+ const fee = {
956
+ 'currency': 'USDC',
957
+ 'cost': this.safeString(trade, 'trade_fee'),
958
+ };
959
+ return this.safeTrade({
960
+ 'info': trade,
961
+ 'id': this.safeString(trade, 'trade_id'),
962
+ 'order': this.safeString(trade, 'order_id'),
963
+ 'symbol': symbol,
964
+ 'side': this.safeStringLower(trade, 'direction'),
965
+ 'type': undefined,
966
+ 'takerOrMaker': this.safeString(trade, 'liquidity_role'),
967
+ 'price': this.safeString(trade, 'trade_price'),
968
+ 'amount': this.safeString(trade, 'trade_amount'),
969
+ 'cost': undefined,
970
+ 'timestamp': timestamp,
971
+ 'datetime': this.iso8601(timestamp),
972
+ 'fee': fee,
973
+ }, market);
974
+ }
975
+ /**
976
+ * @method
977
+ * @name derive#fetchFundingRateHistory
978
+ * @description fetches historical funding rate prices
979
+ * @see https://docs.derive.xyz/reference/post_public-get-funding-rate-history
980
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
981
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
982
+ * @param {int} [limit] the maximum amount of funding rate structures to fetch
983
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
984
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
985
+ */
986
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
987
+ await this.loadMarkets();
988
+ const market = this.market(symbol);
989
+ const request = {
990
+ 'instrument_name': market['id'],
991
+ };
992
+ if (since !== undefined) {
993
+ request['start_timestamp'] = since;
994
+ }
995
+ const until = this.safeInteger(params, 'until');
996
+ params = this.omit(params, ['until']);
997
+ if (until !== undefined) {
998
+ request['to_timestamp'] = until;
999
+ }
1000
+ const response = await this.publicPostGetFundingRateHistory(this.extend(request, params));
1001
+ //
1002
+ // {
1003
+ // "result": {
1004
+ // "funding_rate_history": [
1005
+ // {
1006
+ // "timestamp": 1736215200000,
1007
+ // "funding_rate": "-0.000020014"
1008
+ // }
1009
+ // ]
1010
+ // },
1011
+ // "id": "3200ab8d-0080-42f0-8517-c13e3d9201d8"
1012
+ // }
1013
+ //
1014
+ const result = this.safeDict(response, 'result', {});
1015
+ const data = this.safeList(result, 'funding_rate_history', []);
1016
+ const rates = [];
1017
+ for (let i = 0; i < data.length; i++) {
1018
+ const entry = data[i];
1019
+ const timestamp = this.safeInteger(entry, 'timestamp');
1020
+ rates.push({
1021
+ 'info': entry,
1022
+ 'symbol': market['symbol'],
1023
+ 'fundingRate': this.safeNumber(entry, 'funding_rate'),
1024
+ 'timestamp': timestamp,
1025
+ 'datetime': this.iso8601(timestamp),
1026
+ });
1027
+ }
1028
+ const sorted = this.sortBy(rates, 'timestamp');
1029
+ return this.filterBySymbolSinceLimit(sorted, market['symbol'], since, limit);
1030
+ }
1031
+ /**
1032
+ * @method
1033
+ * @name derive#fetchFundingRate
1034
+ * @description fetch the current funding rate
1035
+ * @see https://docs.derive.xyz/reference/post_public-get-funding-rate-history
1036
+ * @param {string} symbol unified market symbol
1037
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1038
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
1039
+ */
1040
+ async fetchFundingRate(symbol, params = {}) {
1041
+ const response = await this.fetchFundingRateHistory(symbol, undefined, 1, params);
1042
+ //
1043
+ // [
1044
+ // {
1045
+ // "info": {
1046
+ // "timestamp": 1736157600000,
1047
+ // "funding_rate": "-0.000008872"
1048
+ // },
1049
+ // "symbol": "BTC/USD:USDC",
1050
+ // "fundingRate": -0.000008872,
1051
+ // "timestamp": 1736157600000,
1052
+ // "datetime": "2025-01-06T10:00:00.000Z"
1053
+ // }
1054
+ // ]
1055
+ //
1056
+ const data = this.safeDict(response, 0);
1057
+ return this.parseFundingRate(data);
1058
+ }
1059
+ parseFundingRate(contract, market = undefined) {
1060
+ const symbol = this.safeString(contract, 'symbol');
1061
+ const fundingTimestamp = this.safeInteger(contract, 'timestamp');
1062
+ return {
1063
+ 'info': contract,
1064
+ 'symbol': symbol,
1065
+ 'markPrice': undefined,
1066
+ 'indexPrice': undefined,
1067
+ 'interestRate': undefined,
1068
+ 'estimatedSettlePrice': undefined,
1069
+ 'timestamp': undefined,
1070
+ 'datetime': undefined,
1071
+ 'fundingRate': this.safeNumber(contract, 'fundingRate'),
1072
+ 'fundingTimestamp': fundingTimestamp,
1073
+ 'fundingDatetime': this.iso8601(fundingTimestamp),
1074
+ 'nextFundingRate': undefined,
1075
+ 'nextFundingTimestamp': undefined,
1076
+ 'nextFundingDatetime': undefined,
1077
+ 'previousFundingRate': undefined,
1078
+ 'previousFundingTimestamp': undefined,
1079
+ 'previousFundingDatetime': undefined,
1080
+ 'interval': undefined,
1081
+ };
1082
+ }
1083
+ hashOrderMessage(order) {
1084
+ const accountHash = this.hash(this.ethAbiEncode([
1085
+ 'bytes32', 'uint256', 'uint256', 'address', 'bytes32', 'uint256', 'address', 'address',
1086
+ ], order), sha3.keccak_256, 'binary');
1087
+ const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
1088
+ const DOMAIN_SEPARATOR = (sandboxMode) ? '9bcf4dc06df5d8bf23af818d5716491b995020f377d3b7b64c29ed14e3dd1105' : 'd96e5f90797da7ec8dc4e276260c7f3f87fedf68775fbe1ef116e996fc60441b';
1089
+ const binaryDomainSeparator = this.base16ToBinary(DOMAIN_SEPARATOR);
1090
+ const prefix = this.base16ToBinary('1901');
1091
+ return this.hash(this.binaryConcat(prefix, binaryDomainSeparator, accountHash), sha3.keccak_256, 'hex');
1092
+ }
1093
+ signOrder(order, privateKey) {
1094
+ const hashOrder = this.hashOrderMessage(order);
1095
+ return this.signHash(hashOrder.slice(-64), privateKey.slice(-64));
1096
+ }
1097
+ hashMessage(message) {
1098
+ const binaryMessage = this.encode(message);
1099
+ const binaryMessageLength = this.binaryLength(binaryMessage);
1100
+ const x19 = this.base16ToBinary('19');
1101
+ const newline = this.base16ToBinary('0a');
1102
+ const prefix = this.binaryConcat(x19, this.encode('Ethereum Signed Message:'), newline, this.encode(this.numberToString(binaryMessageLength)));
1103
+ return '0x' + this.hash(this.binaryConcat(prefix, binaryMessage), sha3.keccak_256, 'hex');
1104
+ }
1105
+ signHash(hash, privateKey) {
1106
+ this.checkRequiredCredentials();
1107
+ const signature = crypto.ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1.secp256k1, undefined);
1108
+ const r = signature['r'];
1109
+ const s = signature['s'];
1110
+ const v = this.intToBase16(this.sum(27, signature['v']));
1111
+ return '0x' + r.padStart(64, '0') + s.padStart(64, '0') + v;
1112
+ }
1113
+ signMessage(message, privateKey) {
1114
+ return this.signHash(this.hashMessage(message), privateKey.slice(-64));
1115
+ }
1116
+ parseUnits(num, dec = '1000000000000000000') {
1117
+ return Precise["default"].stringMul(num, dec);
1118
+ }
1119
+ /**
1120
+ * @method
1121
+ * @name derive#createOrder
1122
+ * @description create a trade order
1123
+ * @see https://docs.derive.xyz/reference/post_private-order
1124
+ * @param {string} symbol unified symbol of the market to create an order in
1125
+ * @param {string} type 'market' or 'limit'
1126
+ * @param {string} side 'buy' or 'sell'
1127
+ * @param {float} amount how much of currency you want to trade in units of base currency
1128
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1129
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1130
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1131
+ * @param {float} [params.triggerPrice] The price a trigger order is triggered at
1132
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)
1133
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
1134
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)
1135
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
1136
+ * @param {float} [params.max_fee] *required* the maximum fee you are willing to pay for the order
1137
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1138
+ */
1139
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1140
+ await this.loadMarkets();
1141
+ const market = this.market(symbol);
1142
+ if (price === undefined) {
1143
+ throw new errors.ArgumentsRequired(this.id + ' createOrder() requires a price argument');
1144
+ }
1145
+ let subaccountId = undefined;
1146
+ [subaccountId, params] = this.handleDeriveSubaccountId('createOrder', params);
1147
+ const test = this.safeBool(params, 'test', false);
1148
+ const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
1149
+ const timeInForce = this.safeStringLower2(params, 'timeInForce', 'time_in_force');
1150
+ const postOnly = this.safeBool(params, 'postOnly');
1151
+ const orderType = type.toLowerCase();
1152
+ const orderSide = side.toLowerCase();
1153
+ const nonce = this.milliseconds();
1154
+ // Order signature expiry must be between 2592000 and 7776000 sec from now
1155
+ const signatureExpiry = this.safeInteger(params, 'signature_expiry_sec', this.seconds() + 7776000);
1156
+ const ACTION_TYPEHASH = this.base16ToBinary('4d7a9f27c403ff9c0f19bce61d76d82f9aa29f8d6d4b0c5474607d9770d1af17');
1157
+ const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
1158
+ const TRADE_MODULE_ADDRESS = (sandboxMode) ? '0x87F2863866D85E3192a35A73b388BD625D83f2be' : '0xB8D20c2B7a1Ad2EE33Bc50eF10876eD3035b5e7b';
1159
+ const priceString = this.numberToString(price);
1160
+ let maxFee = undefined;
1161
+ [maxFee, params] = this.handleOptionAndParams(params, 'createOrder', 'max_fee');
1162
+ if (maxFee === undefined) {
1163
+ throw new errors.ArgumentsRequired(this.id + ' createOrder() requires a max_fee argument in params');
1164
+ }
1165
+ const maxFeeString = this.numberToString(maxFee);
1166
+ const amountString = this.numberToString(amount);
1167
+ const tradeModuleDataHash = this.hash(this.ethAbiEncode([
1168
+ 'address', 'uint', 'int', 'int', 'uint', 'uint', 'bool',
1169
+ ], [
1170
+ market['info']['base_asset_address'],
1171
+ this.parseToNumeric(market['info']['base_asset_sub_id']),
1172
+ this.convertToBigInt(this.parseUnits(priceString)),
1173
+ this.convertToBigInt(this.parseUnits(this.amountToPrecision(symbol, amountString))),
1174
+ this.convertToBigInt(this.parseUnits(maxFeeString)),
1175
+ subaccountId,
1176
+ orderSide === 'buy',
1177
+ ]), sha3.keccak_256, 'binary');
1178
+ let deriveWalletAddress = undefined;
1179
+ [deriveWalletAddress, params] = this.handleDeriveWalletAddress('createOrder', params);
1180
+ const signature = this.signOrder([
1181
+ ACTION_TYPEHASH,
1182
+ subaccountId,
1183
+ nonce,
1184
+ TRADE_MODULE_ADDRESS,
1185
+ tradeModuleDataHash,
1186
+ signatureExpiry,
1187
+ deriveWalletAddress,
1188
+ this.walletAddress,
1189
+ ], this.privateKey);
1190
+ const request = {
1191
+ 'instrument_name': market['id'],
1192
+ 'direction': orderSide,
1193
+ 'order_type': orderType,
1194
+ 'nonce': nonce,
1195
+ 'amount': amountString,
1196
+ 'limit_price': priceString,
1197
+ 'max_fee': maxFeeString,
1198
+ 'subaccount_id': subaccountId,
1199
+ 'signature_expiry_sec': signatureExpiry,
1200
+ 'referral_code': this.safeString(this.options, 'id', '0x0ad42b8e602c2d3d475ae52d678cf63d84ab2749'),
1201
+ 'signer': this.walletAddress,
1202
+ };
1203
+ if (reduceOnly !== undefined) {
1204
+ request['reduce_only'] = reduceOnly;
1205
+ if (reduceOnly && postOnly) {
1206
+ throw new errors.InvalidOrder(this.id + ' cannot use reduce only with post only time in force');
1207
+ }
1208
+ }
1209
+ if (postOnly !== undefined) {
1210
+ request['time_in_force'] = 'post_only';
1211
+ }
1212
+ else if (timeInForce !== undefined) {
1213
+ request['time_in_force'] = timeInForce;
1214
+ }
1215
+ const stopLoss = this.safeValue(params, 'stopLoss');
1216
+ const takeProfit = this.safeValue(params, 'takeProfit');
1217
+ const triggerPriceType = this.safeString(params, 'trigger_price_type', 'mark');
1218
+ if (stopLoss !== undefined) {
1219
+ const stopLossPrice = this.safeString(stopLoss, 'triggerPrice', stopLoss);
1220
+ request['trigger_price'] = stopLossPrice;
1221
+ request['trigger_type'] = 'stoploss';
1222
+ request['trigger_price_type'] = triggerPriceType;
1223
+ }
1224
+ else if (takeProfit !== undefined) {
1225
+ const takeProfitPrice = this.safeString(takeProfit, 'triggerPrice', takeProfit);
1226
+ request['trigger_price'] = takeProfitPrice;
1227
+ request['trigger_type'] = 'takeprofit';
1228
+ request['trigger_price_type'] = triggerPriceType;
1229
+ }
1230
+ const clientOrderId = this.safeString(params, 'clientOrderId');
1231
+ if (clientOrderId !== undefined) {
1232
+ request['label'] = clientOrderId;
1233
+ }
1234
+ request['signature'] = signature;
1235
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'timeInForce', 'time_in_force', 'postOnly', 'test', 'clientOrderId', 'stopPrice', 'triggerPrice', 'trigger_price', 'stopLoss', 'takeProfit', 'trigger_price_type']);
1236
+ let response = undefined;
1237
+ if (test) {
1238
+ response = await this.privatePostOrderDebug(this.extend(request, params));
1239
+ }
1240
+ else {
1241
+ response = await this.privatePostOrder(this.extend(request, params));
1242
+ }
1243
+ //
1244
+ // {
1245
+ // "result": {
1246
+ // "raw_data": {
1247
+ // "subaccount_id": 130837,
1248
+ // "nonce": 1736923517552,
1249
+ // "module": "0x87F2863866D85E3192a35A73b388BD625D83f2be",
1250
+ // "expiry": 86400,
1251
+ // "owner": "0x108b9aF9279a525b8A8AeAbE7AC2bA925Bc50075",
1252
+ // "signer": "0x108b9aF9279a525b8A8AeAbE7AC2bA925Bc50075",
1253
+ // "signature": "0xaa4f42b2f3da33c668fa703ea872d4c3a6b55aca66025b5119e3bebb6679fe2e2794638db51dcace21fc39a498047835994f07eb59f311bb956ce057e66793d1c",
1254
+ // "data": {
1255
+ // "asset": "0xAFB6Bb95cd70D5367e2C39e9dbEb422B9815339D",
1256
+ // "sub_id": 0,
1257
+ // "limit_price": "10000",
1258
+ // "desired_amount": "0.001",
1259
+ // "worst_fee": "0",
1260
+ // "recipient_id": 130837,
1261
+ // "is_bid": true,
1262
+ // "trade_id": ""
1263
+ // }
1264
+ // },
1265
+ // "encoded_data": "0x000000000000000000000000afb6bb95cd70d5367e2c39e9dbeb422b9815339d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021e19e0c9bab240000000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ff150000000000000000000000000000000000000000000000000000000000000001",
1266
+ // "encoded_data_hashed": "0xe88fb416bc54dba2d288988f1a82fee40fd792ed555b3471b5f6b4b810d279b4",
1267
+ // "action_hash": "0x273a0befb3751fa991edc7ed73582456c3b50ae964d458c8f472e932fb6a0069",
1268
+ // "typed_data_hash": "0x123e2d2f3d5b2473b4e260f51c6459d6bf904e5db8f042a3ea63be8d55329ce9"
1269
+ // },
1270
+ // "id": "f851c8c4-dddf-4b77-93cf-aeddd0966f29"
1271
+ // }
1272
+ // {
1273
+ // "result": {
1274
+ // "order": {
1275
+ // "subaccount_id": 130837,
1276
+ // "order_id": "96349ebb-7d46-43ae-81c7-7ab390444293",
1277
+ // "instrument_name": "BTC-PERP",
1278
+ // "direction": "buy",
1279
+ // "label": "",
1280
+ // "quote_id": null,
1281
+ // "creation_timestamp": 1737467576257,
1282
+ // "last_update_timestamp": 1737467576257,
1283
+ // "limit_price": "10000",
1284
+ // "amount": "0.01",
1285
+ // "filled_amount": "0",
1286
+ // "average_price": "0",
1287
+ // "order_fee": "0",
1288
+ // "order_type": "limit",
1289
+ // "time_in_force": "gtc",
1290
+ // "order_status": "open",
1291
+ // "max_fee": "210",
1292
+ // "signature_expiry_sec": 1737468175989,
1293
+ // "nonce": 1737467575989,
1294
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1295
+ // "signature": "0xd1ca49df1fa06bd805bb59b132ff6c0de29bf973a3e01705abe0a01cc956e4945ed9eb99ab68f3df4c037908113cac5a5bfc3a954a0b7103cdab285962fa6a51c",
1296
+ // "cancel_reason": "",
1297
+ // "mmp": false,
1298
+ // "is_transfer": false,
1299
+ // "replaced_order_id": null,
1300
+ // "trigger_type": null,
1301
+ // "trigger_price_type": null,
1302
+ // "trigger_price": null,
1303
+ // "trigger_reject_message": null
1304
+ // },
1305
+ // "trades": []
1306
+ // },
1307
+ // "id": "397087fa-0125-42af-bfc3-f66166f9fb55"
1308
+ // }
1309
+ //
1310
+ const result = this.safeDict(response, 'result');
1311
+ let rawOrder = this.safeDict(result, 'raw_data');
1312
+ if (rawOrder === undefined) {
1313
+ rawOrder = this.safeDict(result, 'order');
1314
+ }
1315
+ const order = this.parseOrder(rawOrder, market);
1316
+ order['type'] = type;
1317
+ return order;
1318
+ }
1319
+ /**
1320
+ * @method
1321
+ * @name derive#editOrder
1322
+ * @description edit a trade order
1323
+ * @see https://docs.derive.xyz/reference/post_private-replace
1324
+ * @param {string} id order id
1325
+ * @param {string} symbol unified symbol of the market to create an order in
1326
+ * @param {string} type 'market' or 'limit'
1327
+ * @param {string} side 'buy' or 'sell'
1328
+ * @param {float} amount how much of currency you want to trade in units of base currency
1329
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1330
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1331
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1332
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1333
+ */
1334
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
1335
+ await this.loadMarkets();
1336
+ const market = this.market(symbol);
1337
+ let subaccountId = undefined;
1338
+ [subaccountId, params] = this.handleDeriveSubaccountId('editOrder', params);
1339
+ const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
1340
+ const timeInForce = this.safeStringLower2(params, 'timeInForce', 'time_in_force');
1341
+ const postOnly = this.safeBool(params, 'postOnly');
1342
+ const orderType = type.toLowerCase();
1343
+ const orderSide = side.toLowerCase();
1344
+ const nonce = this.milliseconds();
1345
+ const signatureExpiry = this.safeNumber(params, 'signature_expiry_sec', this.seconds() + 7776000);
1346
+ // TODO: subaccount id / trade module address
1347
+ const ACTION_TYPEHASH = this.base16ToBinary('4d7a9f27c403ff9c0f19bce61d76d82f9aa29f8d6d4b0c5474607d9770d1af17');
1348
+ const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
1349
+ const TRADE_MODULE_ADDRESS = (sandboxMode) ? '0x87F2863866D85E3192a35A73b388BD625D83f2be' : '0xB8D20c2B7a1Ad2EE33Bc50eF10876eD3035b5e7b';
1350
+ const priceString = this.numberToString(price);
1351
+ const maxFeeString = this.safeString(params, 'max_fee', '0');
1352
+ const amountString = this.numberToString(amount);
1353
+ const tradeModuleDataHash = this.hash(this.ethAbiEncode([
1354
+ 'address', 'uint', 'int', 'int', 'uint', 'uint', 'bool',
1355
+ ], [
1356
+ market['info']['base_asset_address'],
1357
+ this.parseToNumeric(market['info']['base_asset_sub_id']),
1358
+ this.convertToBigInt(this.parseUnits(priceString)),
1359
+ this.convertToBigInt(this.parseUnits(this.amountToPrecision(symbol, amountString))),
1360
+ this.convertToBigInt(this.parseUnits(maxFeeString)),
1361
+ subaccountId,
1362
+ orderSide === 'buy',
1363
+ ]), sha3.keccak_256, 'binary');
1364
+ let deriveWalletAddress = undefined;
1365
+ [deriveWalletAddress, params] = this.handleDeriveWalletAddress('editOrder', params);
1366
+ const signature = this.signOrder([
1367
+ ACTION_TYPEHASH,
1368
+ subaccountId,
1369
+ nonce,
1370
+ TRADE_MODULE_ADDRESS,
1371
+ tradeModuleDataHash,
1372
+ signatureExpiry,
1373
+ deriveWalletAddress,
1374
+ this.walletAddress,
1375
+ ], this.privateKey);
1376
+ const request = {
1377
+ 'instrument_name': market['id'],
1378
+ 'order_id_to_cancel': id,
1379
+ 'direction': orderSide,
1380
+ 'order_type': orderType,
1381
+ 'nonce': nonce,
1382
+ 'amount': amountString,
1383
+ 'limit_price': priceString,
1384
+ 'max_fee': maxFeeString,
1385
+ 'subaccount_id': subaccountId,
1386
+ 'signature_expiry_sec': signatureExpiry,
1387
+ 'signer': this.walletAddress,
1388
+ };
1389
+ if (reduceOnly !== undefined) {
1390
+ request['reduce_only'] = reduceOnly;
1391
+ if (reduceOnly && postOnly) {
1392
+ throw new errors.InvalidOrder(this.id + ' cannot use reduce only with post only time in force');
1393
+ }
1394
+ }
1395
+ if (postOnly !== undefined) {
1396
+ request['time_in_force'] = 'post_only';
1397
+ }
1398
+ else if (timeInForce !== undefined) {
1399
+ request['time_in_force'] = timeInForce;
1400
+ }
1401
+ const clientOrderId = this.safeString(params, 'clientOrderId');
1402
+ if (clientOrderId !== undefined) {
1403
+ request['label'] = clientOrderId;
1404
+ }
1405
+ request['signature'] = signature;
1406
+ params = this.omit(params, ['reduceOnly', 'reduce_only', 'timeInForce', 'time_in_force', 'postOnly', 'clientOrderId']);
1407
+ const response = await this.privatePostReplace(this.extend(request, params));
1408
+ //
1409
+ // {
1410
+ // "result":
1411
+ // {
1412
+ // "cancelled_order":
1413
+ // {
1414
+ // "subaccount_id": 130837,
1415
+ // "order_id": "c2337704-f1af-437d-91c8-dddb9d6bac59",
1416
+ // "instrument_name": "BTC-PERP",
1417
+ // "direction": "buy",
1418
+ // "label": "test1234",
1419
+ // "quote_id": null,
1420
+ // "creation_timestamp": 1737539743959,
1421
+ // "last_update_timestamp": 1737539764234,
1422
+ // "limit_price": "10000",
1423
+ // "amount": "0.01",
1424
+ // "filled_amount": "0",
1425
+ // "average_price": "0",
1426
+ // "order_fee": "0",
1427
+ // "order_type": "limit",
1428
+ // "time_in_force": "post_only",
1429
+ // "order_status": "cancelled",
1430
+ // "max_fee": "211",
1431
+ // "signature_expiry_sec": 1737540343631,
1432
+ // "nonce": 1737539743631,
1433
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1434
+ // "signature": "0xdb669e18f407a3efa816b79c0dd3bac1c651d4dbf3caad4db67678ce9b81c76378d787a08143a30707eb0827ce4626640767c9f174358df1b90611bd6d1391711b",
1435
+ // "cancel_reason": "user_request",
1436
+ // "mmp": false,
1437
+ // "is_transfer": false,
1438
+ // "replaced_order_id": null,
1439
+ // "trigger_type": null,
1440
+ // "trigger_price_type": null,
1441
+ // "trigger_price": null,
1442
+ // "trigger_reject_message": null,
1443
+ // },
1444
+ // "order":
1445
+ // {
1446
+ // "subaccount_id": 130837,
1447
+ // "order_id": "97af0902-813f-4892-a54b-797e5689db05",
1448
+ // "instrument_name": "BTC-PERP",
1449
+ // "direction": "buy",
1450
+ // "label": "test1234",
1451
+ // "quote_id": null,
1452
+ // "creation_timestamp": 1737539764154,
1453
+ // "last_update_timestamp": 1737539764154,
1454
+ // "limit_price": "10000",
1455
+ // "amount": "0.01",
1456
+ // "filled_amount": "0",
1457
+ // "average_price": "0",
1458
+ // "order_fee": "0",
1459
+ // "order_type": "limit",
1460
+ // "time_in_force": "post_only",
1461
+ // "order_status": "open",
1462
+ // "max_fee": "211",
1463
+ // "signature_expiry_sec": 1737540363890,
1464
+ // "nonce": 1737539763890,
1465
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1466
+ // "signature": "0xef2c459ab4797cbbd7d97b47678ff172542af009bac912bf53e7879cf92eb1aa6b1a6cf40bf0928684f5394942fb424cc2db71eac0eaf7226a72480034332f291c",
1467
+ // "cancel_reason": "",
1468
+ // "mmp": false,
1469
+ // "is_transfer": false,
1470
+ // "replaced_order_id": "c2337704-f1af-437d-91c8-dddb9d6bac59",
1471
+ // "trigger_type": null,
1472
+ // "trigger_price_type": null,
1473
+ // "trigger_price": null,
1474
+ // "trigger_reject_message": null,
1475
+ // },
1476
+ // "trades": [],
1477
+ // "create_order_error": null,
1478
+ // },
1479
+ // "id": "fb19e991-15f6-4c80-a20c-917e762a1a38",
1480
+ // }
1481
+ //
1482
+ const result = this.safeDict(response, 'result');
1483
+ const rawOrder = this.safeDict(result, 'order');
1484
+ const order = this.parseOrder(rawOrder, market);
1485
+ return order;
1486
+ }
1487
+ /**
1488
+ * @method
1489
+ * @name derive#cancelOrder
1490
+ * @see https://docs.derive.xyz/reference/post_private-cancel
1491
+ * @description cancels an open order
1492
+ * @param {string} id order id
1493
+ * @param {string} symbol unified symbol of the market the order was made in
1494
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1495
+ * @param {boolean} [params.trigger] whether the order is a trigger/algo order
1496
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1497
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1498
+ */
1499
+ async cancelOrder(id, symbol = undefined, params = {}) {
1500
+ if (symbol === undefined) {
1501
+ throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1502
+ }
1503
+ await this.loadMarkets();
1504
+ const market = this.market(symbol);
1505
+ const isTrigger = this.safeBool2(params, 'trigger', 'stop', false);
1506
+ let subaccountId = undefined;
1507
+ [subaccountId, params] = this.handleDeriveSubaccountId('cancelOrder', params);
1508
+ params = this.omit(params, ['trigger', 'stop']);
1509
+ const request = {
1510
+ 'instrument_name': market['id'],
1511
+ 'subaccount_id': subaccountId,
1512
+ };
1513
+ const clientOrderIdUnified = this.safeString(params, 'clientOrderId');
1514
+ const clientOrderIdExchangeSpecific = this.safeString(params, 'label', clientOrderIdUnified);
1515
+ const isByClientOrder = clientOrderIdExchangeSpecific !== undefined;
1516
+ let response = undefined;
1517
+ if (isByClientOrder) {
1518
+ request['label'] = clientOrderIdExchangeSpecific;
1519
+ params = this.omit(params, ['clientOrderId', 'label']);
1520
+ response = await this.privatePostCancelByLabel(this.extend(request, params));
1521
+ }
1522
+ else {
1523
+ request['order_id'] = id;
1524
+ if (isTrigger) {
1525
+ response = await this.privatePostCancelTriggerOrder(this.extend(request, params));
1526
+ }
1527
+ else {
1528
+ response = await this.privatePostCancel(this.extend(request, params));
1529
+ }
1530
+ }
1531
+ //
1532
+ // {
1533
+ // "result": {
1534
+ // "subaccount_id": 130837,
1535
+ // "order_id": "de4f30b6-0dcb-4df6-9222-c1a27f1ad80d",
1536
+ // "instrument_name": "BTC-PERP",
1537
+ // "direction": "buy",
1538
+ // "label": "test1234",
1539
+ // "quote_id": null,
1540
+ // "creation_timestamp": 1737540100989,
1541
+ // "last_update_timestamp": 1737540574696,
1542
+ // "limit_price": "10000",
1543
+ // "amount": "0.01",
1544
+ // "filled_amount": "0",
1545
+ // "average_price": "0",
1546
+ // "order_fee": "0",
1547
+ // "order_type": "limit",
1548
+ // "time_in_force": "post_only",
1549
+ // "order_status": "cancelled",
1550
+ // "max_fee": "211",
1551
+ // "signature_expiry_sec": 1737540700726,
1552
+ // "nonce": 1737540100726,
1553
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1554
+ // "signature": "0x9cd1a6e32a0699929e4e090c08c548366b1353701ec56e02d5cdf37fc89bd19b7b29e00e57e8383bb6336d73019027a7e2a4364f40859e7a949115024c7f199a1b",
1555
+ // "cancel_reason": "user_request",
1556
+ // "mmp": false,
1557
+ // "is_transfer": false,
1558
+ // "replaced_order_id": "4ccc89ba-3c3d-4047-8900-0aa5fb4ef706",
1559
+ // "trigger_type": null,
1560
+ // "trigger_price_type": null,
1561
+ // "trigger_price": null,
1562
+ // "trigger_reject_message": null
1563
+ // },
1564
+ // "id": "cef61e2a-cb13-4779-8e6b-535361981fad"
1565
+ // }
1566
+ //
1567
+ // {
1568
+ // "result": {
1569
+ // "cancelled_orders": 1
1570
+ // },
1571
+ // "id": "674e075e-1e8a-4a47-99ff-75efbdd2370f"
1572
+ // }
1573
+ //
1574
+ const extendParams = { 'symbol': symbol };
1575
+ const order = this.safeDict(response, 'result');
1576
+ if (isByClientOrder) {
1577
+ extendParams['client_order_id'] = clientOrderIdExchangeSpecific;
1578
+ }
1579
+ return this.extend(this.parseOrder(order, market), extendParams);
1580
+ }
1581
+ /**
1582
+ * @method
1583
+ * @name derive#cancelAllOrders
1584
+ * @see https://docs.derive.xyz/reference/post_private-cancel-by-instrument
1585
+ * @see https://docs.derive.xyz/reference/post_private-cancel-all
1586
+ * @description cancel all open orders in a market
1587
+ * @param {string} symbol unified market symbol
1588
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1589
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1590
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1591
+ */
1592
+ async cancelAllOrders(symbol = undefined, params = {}) {
1593
+ await this.loadMarkets();
1594
+ let market = undefined;
1595
+ if (symbol !== undefined) {
1596
+ market = this.market(symbol);
1597
+ }
1598
+ let subaccountId = undefined;
1599
+ [subaccountId, params] = this.handleDeriveSubaccountId('cancelAllOrders', params);
1600
+ const request = {
1601
+ 'subaccount_id': subaccountId,
1602
+ };
1603
+ let response = undefined;
1604
+ if (market !== undefined) {
1605
+ request['instrument_name'] = market['id'];
1606
+ response = await this.privatePostCancelByInstrument(this.extend(request, params));
1607
+ }
1608
+ else {
1609
+ response = await this.privatePostCancelAll(this.extend(request, params));
1610
+ }
1611
+ //
1612
+ // {
1613
+ // "result": {
1614
+ // "cancelled_orders": 0
1615
+ // },
1616
+ // "id": "9d633799-2098-4559-b547-605bb6f4d8f4"
1617
+ // }
1618
+ //
1619
+ // {
1620
+ // "id": "45548646-c74f-4ca2-9de4-551e6de49afa",
1621
+ // "result": "ok"
1622
+ // }
1623
+ //
1624
+ return response;
1625
+ }
1626
+ /**
1627
+ * @method
1628
+ * @name derive#fetchOrders
1629
+ * @description fetches information on multiple orders made by the user
1630
+ * @see https://docs.derive.xyz/reference/post_private-get-orders
1631
+ * @param {string} symbol unified market symbol of the market orders were made in
1632
+ * @param {int} [since] the earliest time in ms to fetch orders for
1633
+ * @param {int} [limit] the maximum number of order structures to retrieve
1634
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1635
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
1636
+ * @param {boolean} [params.trigger] whether the order is a trigger/algo order
1637
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1638
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1639
+ */
1640
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1641
+ await this.loadMarkets();
1642
+ let paginate = false;
1643
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');
1644
+ if (paginate) {
1645
+ return await this.fetchPaginatedCallIncremental('fetchOrders', symbol, since, limit, params, 'page', 500);
1646
+ }
1647
+ const isTrigger = this.safeBool2(params, 'trigger', 'stop', false);
1648
+ params = this.omit(params, ['trigger', 'stop']);
1649
+ let subaccountId = undefined;
1650
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchOrders', params);
1651
+ const request = {
1652
+ 'subaccount_id': subaccountId,
1653
+ };
1654
+ let market = undefined;
1655
+ if (symbol !== undefined) {
1656
+ market = this.market(symbol);
1657
+ request['instrument_name'] = market['id'];
1658
+ }
1659
+ if (limit !== undefined) {
1660
+ request['page_size'] = limit;
1661
+ }
1662
+ else {
1663
+ request['page_size'] = 500;
1664
+ }
1665
+ if (isTrigger) {
1666
+ request['status'] = 'untriggered';
1667
+ }
1668
+ const response = await this.privatePostGetOrders(this.extend(request, params));
1669
+ //
1670
+ // {
1671
+ // "result": {
1672
+ // "subaccount_id": 130837,
1673
+ // "orders": [
1674
+ // {
1675
+ // "subaccount_id": 130837,
1676
+ // "order_id": "63a80cb8-387b-472b-a838-71cd9513c365",
1677
+ // "instrument_name": "BTC-PERP",
1678
+ // "direction": "buy",
1679
+ // "label": "test1234",
1680
+ // "quote_id": null,
1681
+ // "creation_timestamp": 1737551053207,
1682
+ // "last_update_timestamp": 1737551053207,
1683
+ // "limit_price": "10000",
1684
+ // "amount": "0.01",
1685
+ // "filled_amount": "0",
1686
+ // "average_price": "0",
1687
+ // "order_fee": "0",
1688
+ // "order_type": "limit",
1689
+ // "time_in_force": "post_only",
1690
+ // "order_status": "open",
1691
+ // "max_fee": "211",
1692
+ // "signature_expiry_sec": 1737551652765,
1693
+ // "nonce": 1737551052765,
1694
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1695
+ // "signature": "0x35535ccb1bcad509ecc435c79e966174db6403fc9aeee1e237d08a941014c57b59279dfe4be39e081f9921a53eaad59cb2a151d9f52f2d05fc47e6280254952e1c",
1696
+ // "cancel_reason": "",
1697
+ // "mmp": false,
1698
+ // "is_transfer": false,
1699
+ // "replaced_order_id": null,
1700
+ // "trigger_type": null,
1701
+ // "trigger_price_type": null,
1702
+ // "trigger_price": null,
1703
+ // "trigger_reject_message": null
1704
+ // }
1705
+ // ],
1706
+ // "pagination": {
1707
+ // "num_pages": 1,
1708
+ // "count": 1
1709
+ // }
1710
+ // },
1711
+ // "id": "e5a88d4f-7ac7-40cd-aec9-e0e8152b8b92"
1712
+ // }
1713
+ //
1714
+ const data = this.safeValue(response, 'result');
1715
+ const page = this.safeInteger(params, 'page');
1716
+ if (page !== undefined) {
1717
+ const pagination = this.safeDict(data, 'pagination');
1718
+ const currentPage = this.safeInteger(pagination, 'num_pages');
1719
+ if (page > currentPage) {
1720
+ return [];
1721
+ }
1722
+ }
1723
+ const orders = this.safeList(data, 'orders');
1724
+ return this.parseOrders(orders, market, since, limit);
1725
+ }
1726
+ /**
1727
+ * @method
1728
+ * @name derive#fetchOpenOrders
1729
+ * @description fetches information on multiple orders made by the user
1730
+ * @see https://docs.derive.xyz/reference/post_private-get-orders
1731
+ * @param {string} symbol unified market symbol of the market orders were made in
1732
+ * @param {int} [since] the earliest time in ms to fetch orders for
1733
+ * @param {int} [limit] the maximum number of order structures to retrieve
1734
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1735
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
1736
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1737
+ */
1738
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1739
+ await this.loadMarkets();
1740
+ const extendedParams = this.extend(params, { 'status': 'open' });
1741
+ return await this.fetchOrders(symbol, since, limit, extendedParams);
1742
+ }
1743
+ /**
1744
+ * @method
1745
+ * @name derive#fetchClosedOrders
1746
+ * @description fetches information on multiple orders made by the user
1747
+ * @see https://docs.derive.xyz/reference/post_private-get-orders
1748
+ * @param {string} symbol unified market symbol of the market orders were made in
1749
+ * @param {int} [since] the earliest time in ms to fetch orders for
1750
+ * @param {int} [limit] the maximum number of order structures to retrieve
1751
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1752
+ * @param {boolean} [params.paginate] set to true if you want to fetch orders with pagination
1753
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1754
+ */
1755
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1756
+ await this.loadMarkets();
1757
+ const extendedParams = this.extend(params, { 'status': 'filled' });
1758
+ return await this.fetchOrders(symbol, since, limit, extendedParams);
1759
+ }
1760
+ /**
1761
+ * @method
1762
+ * @name derive#fetchCanceledOrders
1763
+ * @description fetches information on multiple canceled orders made by the user
1764
+ * @see https://docs.derive.xyz/reference/post_private-get-orders
1765
+ * @param {string} symbol unified market symbol of the market the orders were made in
1766
+ * @param {int} [since] the earliest time in ms to fetch orders for
1767
+ * @param {int} [limit] the maximum number of order structures to retrieve
1768
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1769
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1770
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1771
+ */
1772
+ async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1773
+ await this.loadMarkets();
1774
+ const extendedParams = this.extend(params, { 'status': 'cancelled' });
1775
+ return await this.fetchOrders(symbol, since, limit, extendedParams);
1776
+ }
1777
+ parseTimeInForce(timeInForce) {
1778
+ const timeInForces = {
1779
+ 'ioc': 'IOC',
1780
+ 'fok': 'FOK',
1781
+ 'gtc': 'GTC',
1782
+ 'post_only': 'PO',
1783
+ };
1784
+ return this.safeString(timeInForces, timeInForce, undefined);
1785
+ }
1786
+ parseOrderStatus(status) {
1787
+ if (status !== undefined) {
1788
+ const statuses = {
1789
+ 'open': 'open',
1790
+ 'untriggered': 'open',
1791
+ 'filled': 'closed',
1792
+ 'cancelled': 'canceled',
1793
+ 'expired': 'rejected',
1794
+ };
1795
+ return this.safeString(statuses, status, status);
1796
+ }
1797
+ return status;
1798
+ }
1799
+ parseOrder(rawOrder, market = undefined) {
1800
+ //
1801
+ // {
1802
+ // "subaccount_id": 130837,
1803
+ // "nonce": 1736923517552,
1804
+ // "module": "0x87F2863866D85E3192a35A73b388BD625D83f2be",
1805
+ // "expiry": 86400,
1806
+ // "owner": "0x108b9aF9279a525b8A8AeAbE7AC2bA925Bc50075",
1807
+ // "signer": "0x108b9aF9279a525b8A8AeAbE7AC2bA925Bc50075",
1808
+ // "signature": "0xaa4f42b2f3da33c668fa703ea872d4c3a6b55aca66025b5119e3bebb6679fe2e2794638db51dcace21fc39a498047835994f07eb59f311bb956ce057e66793d1c",
1809
+ // "data": {
1810
+ // "asset": "0xAFB6Bb95cd70D5367e2C39e9dbEb422B9815339D",
1811
+ // "sub_id": 0,
1812
+ // "limit_price": "10000",
1813
+ // "desired_amount": "0.001",
1814
+ // "worst_fee": "0",
1815
+ // "recipient_id": 130837,
1816
+ // "is_bid": true,
1817
+ // "trade_id": ""
1818
+ // }
1819
+ // }
1820
+ // {
1821
+ // "subaccount_id": 130837,
1822
+ // "order_id": "96349ebb-7d46-43ae-81c7-7ab390444293",
1823
+ // "instrument_name": "BTC-PERP",
1824
+ // "direction": "buy",
1825
+ // "label": "",
1826
+ // "quote_id": null,
1827
+ // "creation_timestamp": 1737467576257,
1828
+ // "last_update_timestamp": 1737467576257,
1829
+ // "limit_price": "10000",
1830
+ // "amount": "0.01",
1831
+ // "filled_amount": "0",
1832
+ // "average_price": "0",
1833
+ // "order_fee": "0",
1834
+ // "order_type": "limit",
1835
+ // "time_in_force": "gtc",
1836
+ // "order_status": "open",
1837
+ // "max_fee": "210",
1838
+ // "signature_expiry_sec": 1737468175989,
1839
+ // "nonce": 1737467575989,
1840
+ // "signer": "0x30CB7B06AdD6749BbE146A6827502B8f2a79269A",
1841
+ // "signature": "0xd1ca49df1fa06bd805bb59b132ff6c0de29bf973a3e01705abe0a01cc956e4945ed9eb99ab68f3df4c037908113cac5a5bfc3a954a0b7103cdab285962fa6a51c",
1842
+ // "cancel_reason": "",
1843
+ // "mmp": false,
1844
+ // "is_transfer": false,
1845
+ // "replaced_order_id": null,
1846
+ // "trigger_type": null,
1847
+ // "trigger_price_type": null,
1848
+ // "trigger_price": null,
1849
+ // "trigger_reject_message": null
1850
+ // }
1851
+ let order = this.safeDict(rawOrder, 'data');
1852
+ if (order === undefined) {
1853
+ order = rawOrder;
1854
+ }
1855
+ const timestamp = this.safeInteger(rawOrder, 'nonce');
1856
+ const orderId = this.safeString(order, 'order_id');
1857
+ const marketId = this.safeString(order, 'instrument_name');
1858
+ if (marketId !== undefined) {
1859
+ market = this.safeMarket(marketId, market);
1860
+ }
1861
+ const symbol = market['symbol'];
1862
+ const price = this.safeString(order, 'limit_price');
1863
+ const average = this.safeString(order, 'average_price');
1864
+ const amount = this.safeString(order, 'desired_amount');
1865
+ const filled = this.safeString(order, 'filled_amount');
1866
+ const fee = this.safeString(order, 'order_fee');
1867
+ const orderType = this.safeStringLower(order, 'order_type');
1868
+ const isBid = this.safeBool(order, 'is_bid');
1869
+ let side = this.safeString(order, 'direction');
1870
+ if (side === undefined) {
1871
+ if (isBid) {
1872
+ side = 'buy';
1873
+ }
1874
+ else {
1875
+ side = 'sell';
1876
+ }
1877
+ }
1878
+ const triggerType = this.safeString(order, 'trigger_type');
1879
+ let stopLossPrice = undefined;
1880
+ let takeProfitPrice = undefined;
1881
+ let triggerPrice = undefined;
1882
+ if (triggerType !== undefined) {
1883
+ triggerPrice = this.safeString(order, 'trigger_price');
1884
+ if (triggerType === 'stoploss') {
1885
+ stopLossPrice = triggerPrice;
1886
+ }
1887
+ else {
1888
+ takeProfitPrice = triggerPrice;
1889
+ }
1890
+ }
1891
+ const lastUpdateTimestamp = this.safeInteger(rawOrder, 'last_update_timestamp');
1892
+ const status = this.safeString(order, 'order_status');
1893
+ const timeInForce = this.safeString(order, 'time_in_force');
1894
+ return this.safeOrder({
1895
+ 'id': orderId,
1896
+ 'clientOrderId': this.safeString(order, 'label'),
1897
+ 'timestamp': timestamp,
1898
+ 'datetime': this.iso8601(timestamp),
1899
+ 'lastTradeTimestamp': undefined,
1900
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
1901
+ 'status': this.parseOrderStatus(status),
1902
+ 'symbol': symbol,
1903
+ 'type': orderType,
1904
+ 'timeInForce': this.parseTimeInForce(timeInForce),
1905
+ 'postOnly': undefined,
1906
+ 'reduceOnly': this.safeBool(order, 'reduce_only'),
1907
+ 'side': side,
1908
+ 'price': price,
1909
+ 'triggerPrice': triggerPrice,
1910
+ 'takeProfitPrice': takeProfitPrice,
1911
+ 'stopLossPrice': stopLossPrice,
1912
+ 'average': average,
1913
+ 'amount': amount,
1914
+ 'filled': filled,
1915
+ 'remaining': undefined,
1916
+ 'cost': undefined,
1917
+ 'trades': undefined,
1918
+ 'fee': {
1919
+ 'cost': fee,
1920
+ 'currency': 'USDC',
1921
+ },
1922
+ 'info': order,
1923
+ }, market);
1924
+ }
1925
+ /**
1926
+ * @method
1927
+ * @name derive#fetchOrderTrades
1928
+ * @description fetch all the trades made from a single order
1929
+ * @see https://docs.derive.xyz/reference/post_private-get-trade-history
1930
+ * @param {string} id order id
1931
+ * @param {string} symbol unified market symbol
1932
+ * @param {int} [since] the earliest time in ms to fetch trades for
1933
+ * @param {int} [limit] the maximum number of trades to retrieve
1934
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1935
+ * @param {string} [params.subaccount_id] *required* the subaccount id
1936
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1937
+ */
1938
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
1939
+ await this.loadMarkets();
1940
+ let subaccountId = undefined;
1941
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchOrderTrades', params);
1942
+ const request = {
1943
+ 'order_id': id,
1944
+ 'subaccount_id': subaccountId,
1945
+ };
1946
+ let market = undefined;
1947
+ if (symbol !== undefined) {
1948
+ market = this.market(symbol);
1949
+ request['instrument_name'] = market['id'];
1950
+ }
1951
+ if (limit !== undefined) {
1952
+ request['page_size'] = limit;
1953
+ }
1954
+ if (since !== undefined) {
1955
+ request['from_timestamp'] = since;
1956
+ }
1957
+ const response = await this.privatePostGetTradeHistory(this.extend(request, params));
1958
+ //
1959
+ // {
1960
+ // "result": {
1961
+ // "subaccount_id": 130837,
1962
+ // "trades": [
1963
+ // {
1964
+ // "subaccount_id": 130837,
1965
+ // "order_id": "30c48194-8d48-43ac-ad00-0d5ba29eddc9",
1966
+ // "instrument_name": "BTC-PERP",
1967
+ // "direction": "sell",
1968
+ // "label": "test1234",
1969
+ // "quote_id": null,
1970
+ // "trade_id": "f8a30740-488c-4c2d-905d-e17057bafde1",
1971
+ // "timestamp": 1738065303708,
1972
+ // "mark_price": "102740.137375457314192317",
1973
+ // "index_price": "102741.553409299981533184",
1974
+ // "trade_price": "102700.6",
1975
+ // "trade_amount": "0.01",
1976
+ // "liquidity_role": "taker",
1977
+ // "realized_pnl": "0",
1978
+ // "realized_pnl_excl_fees": "0",
1979
+ // "is_transfer": false,
1980
+ // "tx_status": "settled",
1981
+ // "trade_fee": "1.127415534092999815",
1982
+ // "tx_hash": "0xc55df1f07330faf86579bd8a6385391fbe9e73089301149d8550e9d29c9ead74",
1983
+ // "transaction_id": "e18b9426-3fa5-41bb-99d3-8b54fb4d51bb"
1984
+ // }
1985
+ // ],
1986
+ // "pagination": {
1987
+ // "num_pages": 1,
1988
+ // "count": 1
1989
+ // }
1990
+ // },
1991
+ // "id": "a16f798c-a121-44e2-b77e-c38a063f8a99"
1992
+ // }
1993
+ //
1994
+ const result = this.safeDict(response, 'result', {});
1995
+ const trades = this.safeList(result, 'trades', []);
1996
+ return this.parseTrades(trades, market, since, limit, params);
1997
+ }
1998
+ /**
1999
+ * @method
2000
+ * @name derive#fetchMyTrades
2001
+ * @description fetch all trades made by the user
2002
+ * @see https://docs.derive.xyz/reference/post_private-get-trade-history
2003
+ * @param {string} symbol unified market symbol
2004
+ * @param {int} [since] the earliest time in ms to fetch trades for
2005
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2006
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2007
+ * @param {boolean} [params.paginate] set to true if you want to fetch trades with pagination
2008
+ * @param {string} [params.subaccount_id] *required* the subaccount id
2009
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2010
+ */
2011
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2012
+ await this.loadMarkets();
2013
+ let paginate = false;
2014
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
2015
+ if (paginate) {
2016
+ return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, 'page', 500);
2017
+ }
2018
+ let subaccountId = undefined;
2019
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchMyTrades', params);
2020
+ const request = {
2021
+ 'subaccount_id': subaccountId,
2022
+ };
2023
+ let market = undefined;
2024
+ if (symbol !== undefined) {
2025
+ market = this.market(symbol);
2026
+ request['instrument_name'] = market['id'];
2027
+ }
2028
+ if (limit !== undefined) {
2029
+ request['page_size'] = limit;
2030
+ }
2031
+ if (since !== undefined) {
2032
+ request['from_timestamp'] = since;
2033
+ }
2034
+ const response = await this.privatePostGetTradeHistory(this.extend(request, params));
2035
+ //
2036
+ // {
2037
+ // "result": {
2038
+ // "subaccount_id": 130837,
2039
+ // "trades": [
2040
+ // {
2041
+ // "subaccount_id": 130837,
2042
+ // "order_id": "30c48194-8d48-43ac-ad00-0d5ba29eddc9",
2043
+ // "instrument_name": "BTC-PERP",
2044
+ // "direction": "sell",
2045
+ // "label": "test1234",
2046
+ // "quote_id": null,
2047
+ // "trade_id": "f8a30740-488c-4c2d-905d-e17057bafde1",
2048
+ // "timestamp": 1738065303708,
2049
+ // "mark_price": "102740.137375457314192317",
2050
+ // "index_price": "102741.553409299981533184",
2051
+ // "trade_price": "102700.6",
2052
+ // "trade_amount": "0.01",
2053
+ // "liquidity_role": "taker",
2054
+ // "realized_pnl": "0",
2055
+ // "realized_pnl_excl_fees": "0",
2056
+ // "is_transfer": false,
2057
+ // "tx_status": "settled",
2058
+ // "trade_fee": "1.127415534092999815",
2059
+ // "tx_hash": "0xc55df1f07330faf86579bd8a6385391fbe9e73089301149d8550e9d29c9ead74",
2060
+ // "transaction_id": "e18b9426-3fa5-41bb-99d3-8b54fb4d51bb"
2061
+ // }
2062
+ // ],
2063
+ // "pagination": {
2064
+ // "num_pages": 1,
2065
+ // "count": 1
2066
+ // }
2067
+ // },
2068
+ // "id": "a16f798c-a121-44e2-b77e-c38a063f8a99"
2069
+ // }
2070
+ //
2071
+ const result = this.safeDict(response, 'result', {});
2072
+ const page = this.safeInteger(params, 'page');
2073
+ if (page !== undefined) {
2074
+ const pagination = this.safeDict(result, 'pagination');
2075
+ const currentPage = this.safeInteger(pagination, 'num_pages');
2076
+ if (page > currentPage) {
2077
+ return [];
2078
+ }
2079
+ }
2080
+ const trades = this.safeList(result, 'trades', []);
2081
+ return this.parseTrades(trades, market, since, limit, params);
2082
+ }
2083
+ /**
2084
+ * @method
2085
+ * @name derive#fetchPositions
2086
+ * @description fetch all open positions
2087
+ * @see https://docs.derive.xyz/reference/post_private-get-positions
2088
+ * @param {string[]} [symbols] not used by kraken fetchPositions ()
2089
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2090
+ * @param {string} [params.subaccount_id] *required* the subaccount id
2091
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2092
+ */
2093
+ async fetchPositions(symbols = undefined, params = {}) {
2094
+ await this.loadMarkets();
2095
+ let subaccountId = undefined;
2096
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchPositions', params);
2097
+ const request = {
2098
+ 'subaccount_id': subaccountId,
2099
+ };
2100
+ params = this.omit(params, ['subaccount_id']);
2101
+ const response = await this.privatePostGetPositions(this.extend(request, params));
2102
+ //
2103
+ // {
2104
+ // "result": {
2105
+ // "subaccount_id": 130837,
2106
+ // "positions": [
2107
+ // {
2108
+ // "instrument_type": "perp",
2109
+ // "instrument_name": "BTC-PERP",
2110
+ // "amount": "-0.02",
2111
+ // "average_price": "102632.9105389869500088",
2112
+ // "realized_pnl": "0",
2113
+ // "unrealized_pnl": "-2.6455959784245548835819950103759765625",
2114
+ // "total_fees": "2.255789220260999824",
2115
+ // "average_price_excl_fees": "102745.7",
2116
+ // "realized_pnl_excl_fees": "0",
2117
+ // "unrealized_pnl_excl_fees": "-0.3898067581635550595819950103759765625",
2118
+ // "net_settlements": "-4.032902047219498639",
2119
+ // "cumulative_funding": "-0.004677736347850093",
2120
+ // "pending_funding": "0",
2121
+ // "mark_price": "102765.190337908177752979099750518798828125",
2122
+ // "index_price": "102767.657193800017641472",
2123
+ // "delta": "1",
2124
+ // "gamma": "0",
2125
+ // "vega": "0",
2126
+ // "theta": "0",
2127
+ // "mark_value": "1.38730606879471451975405216217041015625",
2128
+ // "maintenance_margin": "-101.37788426911356509663164615631103515625",
2129
+ // "initial_margin": "-132.2074413704858670826070010662078857421875",
2130
+ // "open_orders_margin": "264.116085900726830004714429378509521484375",
2131
+ // "leverage": "8.6954476205089299495699106539379941746377322586618",
2132
+ // "liquidation_price": "109125.705451984322280623018741607666015625",
2133
+ // "creation_timestamp": 1738065303840
2134
+ // }
2135
+ // ]
2136
+ // },
2137
+ // "id": "167350f1-d9fc-41d4-9797-1c78f83fda8e"
2138
+ // }
2139
+ //
2140
+ const result = this.safeDict(response, 'result', {});
2141
+ const positions = this.safeList(result, 'positions', []);
2142
+ return this.parsePositions(positions, symbols);
2143
+ }
2144
+ parsePosition(position, market = undefined) {
2145
+ //
2146
+ // {
2147
+ // "instrument_type": "perp",
2148
+ // "instrument_name": "BTC-PERP",
2149
+ // "amount": "-0.02",
2150
+ // "average_price": "102632.9105389869500088",
2151
+ // "realized_pnl": "0",
2152
+ // "unrealized_pnl": "-2.6455959784245548835819950103759765625",
2153
+ // "total_fees": "2.255789220260999824",
2154
+ // "average_price_excl_fees": "102745.7",
2155
+ // "realized_pnl_excl_fees": "0",
2156
+ // "unrealized_pnl_excl_fees": "-0.3898067581635550595819950103759765625",
2157
+ // "net_settlements": "-4.032902047219498639",
2158
+ // "cumulative_funding": "-0.004677736347850093",
2159
+ // "pending_funding": "0",
2160
+ // "mark_price": "102765.190337908177752979099750518798828125",
2161
+ // "index_price": "102767.657193800017641472",
2162
+ // "delta": "1",
2163
+ // "gamma": "0",
2164
+ // "vega": "0",
2165
+ // "theta": "0",
2166
+ // "mark_value": "1.38730606879471451975405216217041015625",
2167
+ // "maintenance_margin": "-101.37788426911356509663164615631103515625",
2168
+ // "initial_margin": "-132.2074413704858670826070010662078857421875",
2169
+ // "open_orders_margin": "264.116085900726830004714429378509521484375",
2170
+ // "leverage": "8.6954476205089299495699106539379941746377322586618",
2171
+ // "liquidation_price": "109125.705451984322280623018741607666015625",
2172
+ // "creation_timestamp": 1738065303840
2173
+ // }
2174
+ //
2175
+ const contract = this.safeString(position, 'instrument_name');
2176
+ market = this.safeMarket(contract, market);
2177
+ let size = this.safeString(position, 'amount');
2178
+ let side = undefined;
2179
+ if (Precise["default"].stringGt(size, '0')) {
2180
+ side = 'long';
2181
+ }
2182
+ else {
2183
+ side = 'short';
2184
+ }
2185
+ const contractSize = this.safeString(market, 'contractSize');
2186
+ const markPrice = this.safeString(position, 'mark_price');
2187
+ const timestamp = this.safeInteger(position, 'creation_timestamp');
2188
+ const unrealisedPnl = this.safeString(position, 'unrealized_pnl');
2189
+ size = Precise["default"].stringAbs(size);
2190
+ const notional = Precise["default"].stringMul(size, markPrice);
2191
+ return this.safePosition({
2192
+ 'info': position,
2193
+ 'id': undefined,
2194
+ 'symbol': this.safeString(market, 'symbol'),
2195
+ 'timestamp': timestamp,
2196
+ 'datetime': this.iso8601(timestamp),
2197
+ 'lastUpdateTimestamp': undefined,
2198
+ 'initialMargin': this.safeString(position, 'initial_margin'),
2199
+ 'initialMarginPercentage': undefined,
2200
+ 'maintenanceMargin': this.safeString(position, 'maintenance_margin'),
2201
+ 'maintenanceMarginPercentage': undefined,
2202
+ 'entryPrice': undefined,
2203
+ 'notional': this.parseNumber(notional),
2204
+ 'leverage': this.safeNumber(position, 'leverage'),
2205
+ 'unrealizedPnl': this.parseNumber(unrealisedPnl),
2206
+ 'contracts': this.parseNumber(size),
2207
+ 'contractSize': this.parseNumber(contractSize),
2208
+ 'marginRatio': undefined,
2209
+ 'liquidationPrice': this.safeNumber(position, 'liquidation_price'),
2210
+ 'markPrice': this.parseNumber(markPrice),
2211
+ 'lastPrice': undefined,
2212
+ 'collateral': undefined,
2213
+ 'marginMode': undefined,
2214
+ 'side': side,
2215
+ 'percentage': undefined,
2216
+ 'hedged': undefined,
2217
+ 'stopLossPrice': undefined,
2218
+ 'takeProfitPrice': undefined,
2219
+ });
2220
+ }
2221
+ /**
2222
+ * @method
2223
+ * @name derive#fetchFundingHistory
2224
+ * @description fetch the history of funding payments paid and received on this account
2225
+ * @see https://docs.derive.xyz/reference/post_private-get-funding-history
2226
+ * @param {string} [symbol] unified market symbol
2227
+ * @param {int} [since] the earliest time in ms to fetch funding history for
2228
+ * @param {int} [limit] the maximum number of funding history structures to retrieve
2229
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2230
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
2231
+ * @returns {object} a [funding history structure]{@link https://docs.ccxt.com/#/?id=funding-history-structure}
2232
+ */
2233
+ async fetchFundingHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2234
+ await this.loadMarkets();
2235
+ let paginate = false;
2236
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingHistory', 'paginate');
2237
+ if (paginate) {
2238
+ return await this.fetchPaginatedCallIncremental('fetchFundingHistory', symbol, since, limit, params, 'page', 500);
2239
+ }
2240
+ let subaccountId = undefined;
2241
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchFundingHistory', params);
2242
+ const request = {
2243
+ 'subaccount_id': subaccountId,
2244
+ };
2245
+ let market = undefined;
2246
+ if (symbol !== undefined) {
2247
+ market = this.market(symbol);
2248
+ request['instrument_name'] = market['id'];
2249
+ }
2250
+ if (since !== undefined) {
2251
+ request['start_timestamp'] = since;
2252
+ }
2253
+ if (limit !== undefined) {
2254
+ request['page_size'] = limit;
2255
+ }
2256
+ const response = await this.privatePostGetFundingHistory(this.extend(request, params));
2257
+ //
2258
+ // {
2259
+ // "result": {
2260
+ // "events": [
2261
+ // {
2262
+ // "instrument_name": "BTC-PERP",
2263
+ // "timestamp": 1738066618272,
2264
+ // "funding": "-0.004677736347850093",
2265
+ // "pnl": "-0.944081615774632967"
2266
+ // },
2267
+ // {
2268
+ // "instrument_name": "BTC-PERP",
2269
+ // "timestamp": 1738066617964,
2270
+ // "funding": "0",
2271
+ // "pnl": "-0.437556413479249408"
2272
+ // },
2273
+ // {
2274
+ // "instrument_name": "BTC-PERP",
2275
+ // "timestamp": 1738065307565,
2276
+ // "funding": "0",
2277
+ // "pnl": "-0.39547479770461644"
2278
+ // }
2279
+ // ],
2280
+ // "pagination": {
2281
+ // "num_pages": 1,
2282
+ // "count": 3
2283
+ // }
2284
+ // },
2285
+ // "id": "524b817f-2108-467f-8795-511066f4acec"
2286
+ // }
2287
+ //
2288
+ const result = this.safeDict(response, 'result', {});
2289
+ const page = this.safeInteger(params, 'page');
2290
+ if (page !== undefined) {
2291
+ const pagination = this.safeDict(result, 'pagination');
2292
+ const currentPage = this.safeInteger(pagination, 'num_pages');
2293
+ if (page > currentPage) {
2294
+ return [];
2295
+ }
2296
+ }
2297
+ const events = this.safeList(result, 'events', []);
2298
+ return this.parseIncomes(events, market, since, limit);
2299
+ }
2300
+ parseIncome(income, market = undefined) {
2301
+ //
2302
+ // {
2303
+ // "instrument_name": "BTC-PERP",
2304
+ // "timestamp": 1738065307565,
2305
+ // "funding": "0",
2306
+ // "pnl": "-0.39547479770461644"
2307
+ // }
2308
+ //
2309
+ const marketId = this.safeString(income, 'instrument_name');
2310
+ const symbol = this.safeSymbol(marketId, market);
2311
+ const rate = this.safeString(income, 'funding');
2312
+ const code = this.safeCurrencyCode('USDC');
2313
+ const timestamp = this.safeInteger(income, 'timestamp');
2314
+ return {
2315
+ 'info': income,
2316
+ 'symbol': symbol,
2317
+ 'code': code,
2318
+ 'timestamp': timestamp,
2319
+ 'datetime': this.iso8601(timestamp),
2320
+ 'id': undefined,
2321
+ 'amount': undefined,
2322
+ 'rate': rate,
2323
+ };
2324
+ }
2325
+ /**
2326
+ * @method
2327
+ * @name derive#fetchBalance
2328
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
2329
+ * @see https://docs.derive.xyz/reference/post_private-get-all-portfolios
2330
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2331
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2332
+ */
2333
+ async fetchBalance(params = {}) {
2334
+ await this.loadMarkets();
2335
+ let deriveWalletAddress = undefined;
2336
+ [deriveWalletAddress, params] = this.handleDeriveWalletAddress('fetchBalance', params);
2337
+ const request = {
2338
+ 'wallet': deriveWalletAddress,
2339
+ };
2340
+ const response = await this.privatePostGetAllPortfolios(this.extend(request, params));
2341
+ //
2342
+ // {
2343
+ // "result": [{
2344
+ // "subaccount_id": 130837,
2345
+ // "label": "",
2346
+ // "currency": "all",
2347
+ // "margin_type": "SM",
2348
+ // "is_under_liquidation": false,
2349
+ // "positions_value": "0",
2350
+ // "collaterals_value": "318.0760325000001103035174310207366943359375",
2351
+ // "subaccount_value": "318.0760325000001103035174310207366943359375",
2352
+ // "positions_maintenance_margin": "0",
2353
+ // "positions_initial_margin": "0",
2354
+ // "collaterals_maintenance_margin": "238.557024375000082727638073265552520751953125",
2355
+ // "collaterals_initial_margin": "190.845619500000083235136116854846477508544921875",
2356
+ // "maintenance_margin": "238.557024375000082727638073265552520751953125",
2357
+ // "initial_margin": "190.845619500000083235136116854846477508544921875",
2358
+ // "open_orders_margin": "0",
2359
+ // "projected_margin_change": "0",
2360
+ // "open_orders": [],
2361
+ // "positions": [],
2362
+ // "collaterals": [
2363
+ // {
2364
+ // "asset_type": "erc20",
2365
+ // "asset_name": "ETH",
2366
+ // "currency": "ETH",
2367
+ // "amount": "0.1",
2368
+ // "mark_price": "3180.760325000000438272",
2369
+ // "mark_value": "318.0760325000001103035174310207366943359375",
2370
+ // "cumulative_interest": "0",
2371
+ // "pending_interest": "0",
2372
+ // "initial_margin": "190.845619500000083235136116854846477508544921875",
2373
+ // "maintenance_margin": "238.557024375000082727638073265552520751953125",
2374
+ // "realized_pnl": "0",
2375
+ // "average_price": "3184.891931",
2376
+ // "unrealized_pnl": "-0.413161",
2377
+ // "total_fees": "0",
2378
+ // "average_price_excl_fees": "3184.891931",
2379
+ // "realized_pnl_excl_fees": "0",
2380
+ // "unrealized_pnl_excl_fees": "-0.413161",
2381
+ // "open_orders_margin": "0",
2382
+ // "creation_timestamp": 1736860533493
2383
+ // }
2384
+ // ]
2385
+ // }],
2386
+ // "id": "27b9a64e-3379-4ce6-a126-9fb941c4a970"
2387
+ // }
2388
+ //
2389
+ const result = this.safeList(response, 'result');
2390
+ return this.parseBalance(result);
2391
+ }
2392
+ parseBalance(response) {
2393
+ const result = {
2394
+ 'info': response,
2395
+ };
2396
+ // TODO:
2397
+ // checked multiple subaccounts
2398
+ // checked balance after open orders / positions
2399
+ for (let i = 0; i < response.length; i++) {
2400
+ const subaccount = response[i];
2401
+ const collaterals = this.safeList(subaccount, 'collaterals', []);
2402
+ for (let j = 0; j < collaterals.length; j++) {
2403
+ const balance = collaterals[j];
2404
+ const code = this.safeCurrencyCode(this.safeString(balance, 'currency'));
2405
+ const account = this.account();
2406
+ account['total'] = this.safeString(balance, 'amount');
2407
+ result[code] = account;
2408
+ }
2409
+ }
2410
+ return this.safeBalance(result);
2411
+ }
2412
+ /**
2413
+ * @method
2414
+ * @name derive#fetchDeposits
2415
+ * @description fetch all deposits made to an account
2416
+ * @see https://docs.derive.xyz/reference/post_private-get-deposit-history
2417
+ * @param {string} code unified currency code
2418
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2419
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2420
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2421
+ * @param {string} [params.subaccount_id] *required* the subaccount id
2422
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2423
+ */
2424
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2425
+ await this.loadMarkets();
2426
+ let subaccountId = undefined;
2427
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchDeposits', params);
2428
+ const request = {
2429
+ 'subaccount_id': subaccountId,
2430
+ };
2431
+ if (since !== undefined) {
2432
+ request['start_timestamp'] = since;
2433
+ }
2434
+ const response = await this.privatePostGetDepositHistory(this.extend(request, params));
2435
+ //
2436
+ // {
2437
+ // "result": {
2438
+ // "events": [
2439
+ // {
2440
+ // "timestamp": 1736860533599,
2441
+ // "transaction_id": "f2069395-ec00-49f5-925a-87202a5d240f",
2442
+ // "asset": "ETH",
2443
+ // "amount": "0.1",
2444
+ // "tx_status": "settled",
2445
+ // "tx_hash": "0xeda21a315c59302a19c42049b4cef05a10b685302b6cc3edbaf49102d91166d4",
2446
+ // "error_log": {}
2447
+ // }
2448
+ // ]
2449
+ // },
2450
+ // "id": "ceebc730-22ab-40cd-9941-33ceb2a74389"
2451
+ // }
2452
+ //
2453
+ const currency = this.safeCurrency(code);
2454
+ const result = this.safeDict(response, 'result', {});
2455
+ const events = this.safeList(result, 'events');
2456
+ return this.parseTransactions(events, currency, since, limit, params);
2457
+ }
2458
+ /**
2459
+ * @method
2460
+ * @name derive#fetchWithdrawals
2461
+ * @description fetch all withdrawals made from an account
2462
+ * @see https://docs.derive.xyz/reference/post_private-get-withdrawal-history
2463
+ * @param {string} code unified currency code
2464
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2465
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2466
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2467
+ * @param {string} [params.subaccount_id] *required* the subaccount id
2468
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2469
+ */
2470
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2471
+ await this.loadMarkets();
2472
+ let subaccountId = undefined;
2473
+ [subaccountId, params] = this.handleDeriveSubaccountId('fetchWithdrawals', params);
2474
+ const request = {
2475
+ 'subaccount_id': subaccountId,
2476
+ };
2477
+ if (since !== undefined) {
2478
+ request['start_timestamp'] = since;
2479
+ }
2480
+ const response = await this.privatePostGetWithdrawalHistory(this.extend(request, params));
2481
+ //
2482
+ // {
2483
+ // "result": {
2484
+ // "events": [
2485
+ // {
2486
+ // "timestamp": 1736860533599,
2487
+ // "transaction_id": "f2069395-ec00-49f5-925a-87202a5d240f",
2488
+ // "asset": "ETH",
2489
+ // "amount": "0.1",
2490
+ // "tx_status": "settled",
2491
+ // "tx_hash": "0xeda21a315c59302a19c42049b4cef05a10b685302b6cc3edbaf49102d91166d4",
2492
+ // "error_log": {}
2493
+ // }
2494
+ // ]
2495
+ // },
2496
+ // "id": "ceebc730-22ab-40cd-9941-33ceb2a74389"
2497
+ // }
2498
+ //
2499
+ const currency = this.safeCurrency(code);
2500
+ const result = this.safeDict(response, 'result', {});
2501
+ const events = this.safeList(result, 'events');
2502
+ return this.parseTransactions(events, currency, since, limit, params);
2503
+ }
2504
+ parseTransaction(transaction, currency = undefined) {
2505
+ //
2506
+ // {
2507
+ // "timestamp": 1736860533599,
2508
+ // "transaction_id": "f2069395-ec00-49f5-925a-87202a5d240f",
2509
+ // "asset": "ETH",
2510
+ // "amount": "0.1",
2511
+ // "tx_status": "settled",
2512
+ // "tx_hash": "0xeda21a315c59302a19c42049b4cef05a10b685302b6cc3edbaf49102d91166d4",
2513
+ // "error_log": {}
2514
+ // }
2515
+ //
2516
+ const code = this.safeString(transaction, 'asset');
2517
+ const timestamp = this.safeInteger(transaction, 'timestamp');
2518
+ let txId = this.safeString(transaction, 'tx_hash');
2519
+ if (txId === '0x0') {
2520
+ txId = undefined;
2521
+ }
2522
+ return {
2523
+ 'info': transaction,
2524
+ 'id': undefined,
2525
+ 'txid': txId,
2526
+ 'timestamp': timestamp,
2527
+ 'datetime': this.iso8601(timestamp),
2528
+ 'address': undefined,
2529
+ 'addressFrom': undefined,
2530
+ 'addressTo': undefined,
2531
+ 'tag': undefined,
2532
+ 'tagFrom': undefined,
2533
+ 'tagTo': undefined,
2534
+ 'type': undefined,
2535
+ 'amount': this.safeNumber(transaction, 'amount'),
2536
+ 'currency': code,
2537
+ 'status': this.parseTransactionStatus(this.safeString(transaction, 'tx_status')),
2538
+ 'updated': undefined,
2539
+ 'comment': undefined,
2540
+ 'internal': undefined,
2541
+ 'fee': undefined,
2542
+ 'network': undefined,
2543
+ };
2544
+ }
2545
+ parseTransactionStatus(status) {
2546
+ const statuses = {
2547
+ 'settled': 'ok',
2548
+ 'reverted': 'failed',
2549
+ };
2550
+ return this.safeString(statuses, status, status);
2551
+ }
2552
+ handleDeriveSubaccountId(methodName, params) {
2553
+ let derivesubAccountId = undefined;
2554
+ [derivesubAccountId, params] = this.handleOptionAndParams(params, methodName, 'subaccount_id');
2555
+ if ((derivesubAccountId !== undefined) && (derivesubAccountId !== '')) {
2556
+ this.options['subaccount_id'] = derivesubAccountId; // saving in options
2557
+ return [derivesubAccountId, params];
2558
+ }
2559
+ const optionsWallet = this.safeString(this.options, 'subaccount_id');
2560
+ if (optionsWallet !== undefined) {
2561
+ return [optionsWallet, params];
2562
+ }
2563
+ throw new errors.ArgumentsRequired(this.id + ' ' + methodName + '() requires a subaccount_id parameter inside \'params\' or exchange.options[\'subaccount_id\']=ID.');
2564
+ }
2565
+ handleDeriveWalletAddress(methodName, params) {
2566
+ let deriveWalletAddress = undefined;
2567
+ [deriveWalletAddress, params] = this.handleOptionAndParams(params, methodName, 'deriveWalletAddress');
2568
+ if ((deriveWalletAddress !== undefined) && (deriveWalletAddress !== '')) {
2569
+ this.options['deriveWalletAddress'] = deriveWalletAddress; // saving in options
2570
+ return [deriveWalletAddress, params];
2571
+ }
2572
+ const optionsWallet = this.safeString(this.options, 'deriveWalletAddress');
2573
+ if (optionsWallet !== undefined) {
2574
+ return [optionsWallet, params];
2575
+ }
2576
+ throw new errors.ArgumentsRequired(this.id + ' ' + methodName + '() requires a deriveWalletAddress parameter inside \'params\' or exchange.options[\'deriveWalletAddress\'] = ADDRESS, the address can find in HOME => Developers tab.');
2577
+ }
2578
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2579
+ if (!response) {
2580
+ return undefined; // fallback to default error handler
2581
+ }
2582
+ const error = this.safeDict(response, 'error');
2583
+ if (error !== undefined) {
2584
+ const errorCode = this.safeString(error, 'code');
2585
+ const feedback = this.id + ' ' + this.json(response);
2586
+ this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
2587
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
2588
+ throw new errors.ExchangeError(feedback);
2589
+ }
2590
+ return undefined;
2591
+ }
2592
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2593
+ const url = this.urls['api'][api] + '/' + path;
2594
+ if (method === 'POST') {
2595
+ headers = {
2596
+ 'Content-Type': 'application/json',
2597
+ };
2598
+ if (api === 'private') {
2599
+ const now = this.milliseconds().toString();
2600
+ const signature = this.signMessage(now, this.privateKey);
2601
+ headers['X-LyraWallet'] = this.safeString(this.options, 'deriveWalletAddress');
2602
+ headers['X-LyraTimestamp'] = now;
2603
+ headers['X-LyraSignature'] = signature;
2604
+ }
2605
+ body = this.json(params);
2606
+ }
2607
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2608
+ }
2609
+ }
2610
+
2611
+ module.exports = derive;