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