ccxt 4.4.8 → 4.4.10

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 (127) hide show
  1. package/README.md +131 -131
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/ascendex.js +2 -1
  5. package/dist/cjs/src/bigone.js +35 -86
  6. package/dist/cjs/src/binance.js +4 -8
  7. package/dist/cjs/src/bingx.js +26 -22
  8. package/dist/cjs/src/bitfinex2.js +5 -16
  9. package/dist/cjs/src/bitget.js +7 -3
  10. package/dist/cjs/src/bitmart.js +1 -0
  11. package/dist/cjs/src/bitmex.js +4 -3
  12. package/dist/cjs/src/blofin.js +4 -13
  13. package/dist/cjs/src/bybit.js +21 -15
  14. package/dist/cjs/src/coinex.js +15 -1
  15. package/dist/cjs/src/delta.js +2 -1
  16. package/dist/cjs/src/deribit.js +1 -0
  17. package/dist/cjs/src/digifinex.js +15 -1
  18. package/dist/cjs/src/gate.js +64 -9
  19. package/dist/cjs/src/hashkey.js +2 -2
  20. package/dist/cjs/src/hitbtc.js +2 -1
  21. package/dist/cjs/src/htx.js +21 -2
  22. package/dist/cjs/src/hyperliquid.js +6 -1
  23. package/dist/cjs/src/krakenfutures.js +3 -2
  24. package/dist/cjs/src/kucoin.js +2 -1
  25. package/dist/cjs/src/kucoinfutures.js +173 -2
  26. package/dist/cjs/src/mexc.js +1 -0
  27. package/dist/cjs/src/oceanex.js +83 -3
  28. package/dist/cjs/src/okx.js +14 -0
  29. package/dist/cjs/src/oxfun.js +4 -4
  30. package/dist/cjs/src/phemex.js +1 -0
  31. package/dist/cjs/src/poloniexfutures.js +11 -0
  32. package/dist/cjs/src/pro/binance.js +4 -4
  33. package/dist/cjs/src/pro/deribit.js +43 -1
  34. package/dist/cjs/src/pro/gate.js +1 -1
  35. package/dist/cjs/src/pro/hitbtc.js +122 -48
  36. package/dist/cjs/src/pro/hollaex.js +5 -0
  37. package/dist/cjs/src/pro/okx.js +19 -3
  38. package/dist/cjs/src/pro/p2b.js +35 -1
  39. package/dist/cjs/src/pro/whitebit.js +31 -0
  40. package/dist/cjs/src/vertex.js +2 -1
  41. package/dist/cjs/src/whitebit.js +10 -9
  42. package/dist/cjs/src/woo.js +42 -17
  43. package/dist/cjs/src/woofipro.js +15 -2
  44. package/dist/cjs/src/xt.js +2 -0
  45. package/js/ccxt.d.ts +1 -1
  46. package/js/ccxt.js +1 -1
  47. package/js/src/abstract/bigone.d.ts +1 -1
  48. package/js/src/abstract/kucoinfutures.d.ts +5 -0
  49. package/js/src/abstract/oceanex.d.ts +5 -0
  50. package/js/src/ascendex.d.ts +3 -21
  51. package/js/src/ascendex.js +2 -1
  52. package/js/src/base/Exchange.d.ts +3 -3
  53. package/js/src/base/types.d.ts +1 -0
  54. package/js/src/bigone.js +35 -86
  55. package/js/src/binance.d.ts +4 -40
  56. package/js/src/binance.js +4 -8
  57. package/js/src/bingx.d.ts +4 -40
  58. package/js/src/bingx.js +26 -22
  59. package/js/src/bitfinex2.d.ts +3 -22
  60. package/js/src/bitfinex2.js +5 -16
  61. package/js/src/bitget.d.ts +3 -39
  62. package/js/src/bitget.js +7 -3
  63. package/js/src/bitmart.d.ts +3 -39
  64. package/js/src/bitmart.js +1 -0
  65. package/js/src/bitmex.d.ts +3 -21
  66. package/js/src/bitmex.js +4 -3
  67. package/js/src/blofin.d.ts +3 -39
  68. package/js/src/blofin.js +4 -13
  69. package/js/src/bybit.d.ts +3 -21
  70. package/js/src/bybit.js +21 -15
  71. package/js/src/coinex.d.ts +5 -40
  72. package/js/src/coinex.js +15 -1
  73. package/js/src/delta.d.ts +4 -40
  74. package/js/src/delta.js +2 -1
  75. package/js/src/deribit.d.ts +3 -39
  76. package/js/src/deribit.js +1 -0
  77. package/js/src/digifinex.d.ts +4 -21
  78. package/js/src/digifinex.js +15 -1
  79. package/js/src/gate.d.ts +6 -41
  80. package/js/src/gate.js +64 -9
  81. package/js/src/hashkey.d.ts +4 -40
  82. package/js/src/hashkey.js +2 -2
  83. package/js/src/hitbtc.d.ts +4 -40
  84. package/js/src/hitbtc.js +2 -1
  85. package/js/src/htx.d.ts +5 -40
  86. package/js/src/htx.js +21 -2
  87. package/js/src/hyperliquid.js +6 -1
  88. package/js/src/krakenfutures.d.ts +3 -21
  89. package/js/src/krakenfutures.js +3 -2
  90. package/js/src/kucoin.js +2 -1
  91. package/js/src/kucoinfutures.d.ts +9 -20
  92. package/js/src/kucoinfutures.js +173 -2
  93. package/js/src/mexc.d.ts +3 -39
  94. package/js/src/mexc.js +1 -0
  95. package/js/src/oceanex.d.ts +9 -1
  96. package/js/src/oceanex.js +83 -3
  97. package/js/src/okx.d.ts +4 -39
  98. package/js/src/okx.js +14 -0
  99. package/js/src/oxfun.d.ts +3 -21
  100. package/js/src/oxfun.js +4 -4
  101. package/js/src/phemex.d.ts +3 -39
  102. package/js/src/phemex.js +1 -0
  103. package/js/src/poloniexfutures.d.ts +3 -20
  104. package/js/src/poloniexfutures.js +11 -0
  105. package/js/src/pro/binance.js +4 -4
  106. package/js/src/pro/deribit.d.ts +2 -1
  107. package/js/src/pro/deribit.js +43 -1
  108. package/js/src/pro/gate.js +1 -1
  109. package/js/src/pro/hitbtc.d.ts +4 -1
  110. package/js/src/pro/hitbtc.js +122 -48
  111. package/js/src/pro/hollaex.js +5 -0
  112. package/js/src/pro/okx.js +19 -3
  113. package/js/src/pro/p2b.d.ts +2 -1
  114. package/js/src/pro/p2b.js +35 -1
  115. package/js/src/pro/whitebit.d.ts +2 -1
  116. package/js/src/pro/whitebit.js +31 -0
  117. package/js/src/vertex.d.ts +4 -40
  118. package/js/src/vertex.js +2 -1
  119. package/js/src/whitebit.d.ts +4 -21
  120. package/js/src/whitebit.js +10 -9
  121. package/js/src/woo.d.ts +4 -40
  122. package/js/src/woo.js +42 -17
  123. package/js/src/woofipro.d.ts +5 -40
  124. package/js/src/woofipro.js +15 -2
  125. package/js/src/xt.d.ts +3 -39
  126. package/js/src/xt.js +2 -0
  127. package/package.json +1 -1
@@ -70,9 +70,10 @@ export default class kucoinfutures extends kucoin {
70
70
  'fetchIsolatedBorrowRates': false,
71
71
  'fetchL3OrderBook': true,
72
72
  'fetchLedger': true,
73
+ 'fetchLeverage': true,
73
74
  'fetchLeverageTiers': false,
74
75
  'fetchMarginAdjustmentHistory': false,
75
- 'fetchMarginMode': false,
76
+ 'fetchMarginMode': true,
76
77
  'fetchMarketLeverageTiers': true,
77
78
  'fetchMarkets': true,
78
79
  'fetchMarkOHLCV': false,
@@ -96,7 +97,7 @@ export default class kucoinfutures extends kucoin {
96
97
  'fetchTransactionFee': false,
97
98
  'fetchWithdrawals': true,
98
99
  'setLeverage': false,
99
- 'setMarginMode': false,
100
+ 'setMarginMode': true,
100
101
  'transfer': true,
101
102
  'withdraw': undefined,
102
103
  },
@@ -173,12 +174,15 @@ export default class kucoinfutures extends kucoin {
173
174
  'trade-fees': 1,
174
175
  'history-positions': 1,
175
176
  'getMaxOpenSize': 1,
177
+ 'getCrossUserLeverage': 1,
178
+ 'position/getMarginMode': 1,
176
179
  },
177
180
  'post': {
178
181
  'withdrawals': 1,
179
182
  'transfer-out': 1,
180
183
  'transfer-in': 1,
181
184
  'orders': 1.33,
185
+ 'st-orders': 1.33,
182
186
  'orders/test': 1.33,
183
187
  'position/margin/auto-deposit-status': 1,
184
188
  'position/margin/deposit-margin': 1,
@@ -186,6 +190,8 @@ export default class kucoinfutures extends kucoin {
186
190
  'bullet-private': 1,
187
191
  'sub/api-key': 1,
188
192
  'sub/api-key/update': 1,
193
+ 'changeCrossUserLeverage': 1,
194
+ 'position/changeMarginMode': 1,
189
195
  },
190
196
  'delete': {
191
197
  'withdrawals/{withdrawalId}': 1,
@@ -320,9 +326,13 @@ export default class kucoinfutures extends kucoin {
320
326
  'futuresPrivate': {
321
327
  'GET': {
322
328
  'getMaxOpenSize': 'v2',
329
+ 'getCrossUserLeverage': 'v2',
330
+ 'position/getMarginMode': 'v2',
323
331
  },
324
332
  'POST': {
325
333
  'transfer-out': 'v2',
334
+ 'changeCrossUserLeverage': 'v2',
335
+ 'position/changeMarginMode': 'v2',
326
336
  },
327
337
  },
328
338
  'futuresPublic': {
@@ -2194,8 +2204,19 @@ export default class kucoinfutures extends kucoin {
2194
2204
  'previousFundingRate': undefined,
2195
2205
  'previousFundingTimestamp': undefined,
2196
2206
  'previousFundingDatetime': undefined,
2207
+ 'interval': this.parseFundingInterval(this.safeString(data, 'granularity')),
2197
2208
  };
2198
2209
  }
2210
+ parseFundingInterval(interval) {
2211
+ const intervals = {
2212
+ '3600000': '1h',
2213
+ '14400000': '4h',
2214
+ '28800000': '8h',
2215
+ '57600000': '16h',
2216
+ '86400000': '24h',
2217
+ };
2218
+ return this.safeString(intervals, interval, interval);
2219
+ }
2199
2220
  parseBalance(response) {
2200
2221
  const result = {
2201
2222
  'info': response,
@@ -2881,4 +2902,154 @@ export default class kucoinfutures extends kucoin {
2881
2902
  'tierBased': true,
2882
2903
  };
2883
2904
  }
2905
+ async fetchMarginMode(symbol, params = {}) {
2906
+ /**
2907
+ * @method
2908
+ * @name kucoinfutures#fetchMarginMode
2909
+ * @description fetches the margin mode of a trading pair
2910
+ * @see https://www.kucoin.com/docs/rest/futures-trading/positions/get-margin-mode
2911
+ * @param {string} symbol unified symbol of the market to fetch the margin mode for
2912
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2913
+ * @returns {object} a [margin mode structure]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
2914
+ */
2915
+ await this.loadMarkets();
2916
+ const market = this.market(symbol);
2917
+ const request = {
2918
+ 'symbol': market['id'],
2919
+ };
2920
+ const response = await this.futuresPrivateGetPositionGetMarginMode(this.extend(request, params));
2921
+ //
2922
+ // {
2923
+ // "code": "200000",
2924
+ // "data": {
2925
+ // "symbol": "XBTUSDTM",
2926
+ // "marginMode": "ISOLATED"
2927
+ // }
2928
+ // }
2929
+ //
2930
+ const data = this.safeDict(response, 'data', {});
2931
+ return this.parseMarginMode(data, market);
2932
+ }
2933
+ parseMarginMode(marginMode, market = undefined) {
2934
+ let marginType = this.safeString(marginMode, 'marginMode');
2935
+ marginType = (marginType === 'ISOLATED') ? 'isolated' : 'cross';
2936
+ return {
2937
+ 'info': marginMode,
2938
+ 'symbol': market['symbol'],
2939
+ 'marginMode': marginType,
2940
+ };
2941
+ }
2942
+ async setMarginMode(marginMode, symbol = undefined, params = {}) {
2943
+ /**
2944
+ * @method
2945
+ * @name kucoinfutures#setMarginMode
2946
+ * @description set margin mode to 'cross' or 'isolated'
2947
+ * @see https://www.kucoin.com/docs/rest/futures-trading/positions/modify-margin-mode
2948
+ * @param {string} marginMode 'cross' or 'isolated'
2949
+ * @param {string} symbol unified market symbol
2950
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2951
+ * @returns {object} response from the exchange
2952
+ */
2953
+ if (symbol === undefined) {
2954
+ throw new ArgumentsRequired(this.id + ' setMarginMode() requires a symbol argument');
2955
+ }
2956
+ this.checkRequiredArgument('setMarginMode', marginMode, 'marginMode', ['cross', 'isolated']);
2957
+ await this.loadMarkets();
2958
+ const market = this.market(symbol);
2959
+ const request = {
2960
+ 'symbol': market['id'],
2961
+ 'marginMode': marginMode.toUpperCase(),
2962
+ };
2963
+ const response = await this.futuresPrivatePostPositionChangeMarginMode(this.extend(request, params));
2964
+ //
2965
+ // {
2966
+ // "code": "200000",
2967
+ // "data": {
2968
+ // "symbol": "XBTUSDTM",
2969
+ // "marginMode": "ISOLATED"
2970
+ // }
2971
+ // }
2972
+ //
2973
+ const data = this.safeDict(response, 'data', {});
2974
+ return this.parseMarginMode(data, market);
2975
+ }
2976
+ async fetchLeverage(symbol, params = {}) {
2977
+ /**
2978
+ * @method
2979
+ * @name kucoin#fetchLeverage
2980
+ * @description fetch the set leverage for a market
2981
+ * @see https://www.kucoin.com/docs/rest/futures-trading/positions/get-cross-margin-leverage
2982
+ * @param {string} symbol unified market symbol
2983
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2984
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2985
+ */
2986
+ let marginMode = undefined;
2987
+ [marginMode, params] = this.handleMarginModeAndParams(symbol, params);
2988
+ if (marginMode !== 'cross') {
2989
+ throw new NotSupported(this.id + ' fetchLeverage() currently supports only params["marginMode"] = "cross"');
2990
+ }
2991
+ await this.loadMarkets();
2992
+ const market = this.market(symbol);
2993
+ const request = {
2994
+ 'symbol': market['id'],
2995
+ };
2996
+ const response = await this.futuresPrivateGetGetCrossUserLeverage(this.extend(request, params));
2997
+ //
2998
+ // {
2999
+ // "code": "200000",
3000
+ // "data": {
3001
+ // "symbol": "XBTUSDTM",
3002
+ // "leverage": "3"
3003
+ // }
3004
+ // }
3005
+ //
3006
+ const data = this.safeDict(response, 'data', {});
3007
+ const parsed = this.parseLeverage(data, market);
3008
+ return this.extend(parsed, {
3009
+ 'marginMode': marginMode,
3010
+ });
3011
+ }
3012
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3013
+ /**
3014
+ * @method
3015
+ * @name kucoinfutures#setLeverage
3016
+ * @description set the level of leverage for a market
3017
+ * @see https://www.kucoin.com/docs/rest/futures-trading/positions/modify-cross-margin-leverage
3018
+ * @param {float} leverage the rate of leverage
3019
+ * @param {string} symbol unified market symbol
3020
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3021
+ * @returns {object} response from the exchange
3022
+ */
3023
+ let marginMode = undefined;
3024
+ [marginMode, params] = this.handleMarginModeAndParams(symbol, params);
3025
+ if (marginMode !== 'cross') {
3026
+ throw new NotSupported(this.id + ' setLeverage() currently supports only params["marginMode"] = "cross"');
3027
+ }
3028
+ await this.loadMarkets();
3029
+ const market = this.market(symbol);
3030
+ const request = {
3031
+ 'symbol': market['id'],
3032
+ 'leverage': leverage.toString(),
3033
+ };
3034
+ const response = await this.futuresPrivatePostChangeCrossUserLeverage(this.extend(request, params));
3035
+ //
3036
+ // {
3037
+ // "code": "200000",
3038
+ // "data": true
3039
+ // }
3040
+ //
3041
+ return this.parseLeverage(response, market);
3042
+ }
3043
+ parseLeverage(leverage, market = undefined) {
3044
+ const marketId = this.safeString(leverage, 'symbol');
3045
+ market = this.safeMarket(marketId, market);
3046
+ const leverageNum = this.safeInteger(leverage, 'leverage');
3047
+ return {
3048
+ 'info': leverage,
3049
+ 'symbol': market['symbol'],
3050
+ 'marginMode': undefined,
3051
+ 'longLeverage': leverageNum,
3052
+ 'shortLeverage': leverageNum,
3053
+ };
3054
+ }
2884
3055
  }
package/js/src/mexc.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/mexc.js';
2
- import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency, Leverage, Num, Account, MarginModification, Currencies, TradingFees, Dict, LeverageTier, LeverageTiers, int } from './base/types.js';
2
+ import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency, Leverage, Num, Account, MarginModification, Currencies, TradingFees, Dict, LeverageTier, LeverageTiers, int, FundingRate } from './base/types.js';
3
3
  /**
4
4
  * @class mexc
5
5
  * @augments Exchange
@@ -64,44 +64,8 @@ export default class mexc extends Exchange {
64
64
  addMargin(symbol: string, amount: number, params?: {}): Promise<MarginModification>;
65
65
  setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
66
66
  fetchFundingHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingHistory[]>;
67
- parseFundingRate(contract: any, market?: Market): {
68
- info: any;
69
- symbol: string;
70
- markPrice: any;
71
- indexPrice: any;
72
- interestRate: any;
73
- estimatedSettlePrice: any;
74
- timestamp: number;
75
- datetime: string;
76
- fundingRate: number;
77
- fundingTimestamp: number;
78
- fundingDatetime: string;
79
- nextFundingRate: any;
80
- nextFundingTimestamp: any;
81
- nextFundingDatetime: any;
82
- previousFundingRate: any;
83
- previousFundingTimestamp: any;
84
- previousFundingDatetime: any;
85
- };
86
- fetchFundingRate(symbol: string, params?: {}): Promise<{
87
- info: any;
88
- symbol: string;
89
- markPrice: any;
90
- indexPrice: any;
91
- interestRate: any;
92
- estimatedSettlePrice: any;
93
- timestamp: number;
94
- datetime: string;
95
- fundingRate: number;
96
- fundingTimestamp: number;
97
- fundingDatetime: string;
98
- nextFundingRate: any;
99
- nextFundingTimestamp: any;
100
- nextFundingDatetime: any;
101
- previousFundingRate: any;
102
- previousFundingTimestamp: any;
103
- previousFundingDatetime: any;
104
- }>;
67
+ parseFundingRate(contract: any, market?: Market): FundingRate;
68
+ fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
105
69
  fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingRateHistory[]>;
106
70
  fetchLeverageTiers(symbols?: Strings, params?: {}): Promise<LeverageTiers>;
107
71
  parseMarketLeverageTiers(info: any, market?: Market): LeverageTier[];
package/js/src/mexc.js CHANGED
@@ -4217,6 +4217,7 @@ export default class mexc extends Exchange {
4217
4217
  'previousFundingRate': undefined,
4218
4218
  'previousFundingTimestamp': undefined,
4219
4219
  'previousFundingDatetime': undefined,
4220
+ 'interval': undefined,
4220
4221
  };
4221
4222
  }
4222
4223
  async fetchFundingRate(symbol, params = {}) {
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/oceanex.js';
2
- import type { Balances, Dict, Dictionary, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, int } from './base/types.js';
2
+ import type { Balances, Currency, Dict, Dictionary, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, int } from './base/types.js';
3
3
  /**
4
4
  * @class oceanex
5
5
  * @augments Exchange
@@ -32,6 +32,14 @@ export default class oceanex extends Exchange {
32
32
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
33
33
  cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
34
34
  cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
35
+ fetchDepositAddressesByNetwork(code: string, params?: {}): Promise<{}>;
36
+ parseDepositAddress(depositAddress: any, currency?: Currency): {
37
+ info: any;
38
+ currency: string;
39
+ address: string;
40
+ tag: string;
41
+ network: string;
42
+ };
35
43
  sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
36
44
  url: string;
37
45
  method: string;
package/js/src/oceanex.js CHANGED
@@ -50,9 +50,9 @@ export default class oceanex extends Exchange {
50
50
  'fetchClosedOrders': true,
51
51
  'fetchCrossBorrowRate': false,
52
52
  'fetchCrossBorrowRates': false,
53
- 'fetchDepositAddress': false,
54
- 'fetchDepositAddresses': false,
55
- 'fetchDepositAddressesByNetwork': false,
53
+ 'fetchDepositAddress': 'emulated',
54
+ 'fetchDepositAddresses': undefined,
55
+ 'fetchDepositAddressesByNetwork': true,
56
56
  'fetchIsolatedBorrowRate': false,
57
57
  'fetchIsolatedBorrowRates': false,
58
58
  'fetchMarkets': true,
@@ -113,6 +113,11 @@ export default class oceanex extends Exchange {
113
113
  'order/delete',
114
114
  'order/delete/multi',
115
115
  'orders/clear',
116
+ '/withdraws/special/new',
117
+ '/deposit_address',
118
+ '/deposit_addresses',
119
+ '/deposit_history',
120
+ '/withdraw_history',
116
121
  ],
117
122
  },
118
123
  },
@@ -913,6 +918,81 @@ export default class oceanex extends Exchange {
913
918
  const data = this.safeList(response, 'data');
914
919
  return this.parseOrders(data);
915
920
  }
921
+ async fetchDepositAddressesByNetwork(code, params = {}) {
922
+ /**
923
+ * @method
924
+ * @name oceanex#fetchDepositAddressesByNetwork
925
+ * @description fetch the deposit addresses for a currency associated with this account
926
+ * @see https://api.oceanex.pro/doc/v1/#deposit-addresses-post
927
+ * @param {string} code unified currency code
928
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
929
+ * @returns {object} a dictionary [address structures]{@link https://docs.ccxt.com/#/?id=address-structure}, indexed by the network
930
+ */
931
+ await this.loadMarkets();
932
+ const currency = this.currency(code);
933
+ const request = {
934
+ 'currency': currency['id'],
935
+ };
936
+ const response = await this.privatePostDepositAddresses(this.extend(request, params));
937
+ //
938
+ // {
939
+ // code: '0',
940
+ // message: 'Operation successful',
941
+ // data: {
942
+ // data: {
943
+ // currency_id: 'usdt',
944
+ // display_name: 'USDT',
945
+ // num_of_resources: '3',
946
+ // resources: [
947
+ // {
948
+ // chain_name: 'TRC20',
949
+ // currency_id: 'usdt',
950
+ // address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
951
+ // memo: '',
952
+ // deposit_status: 'enabled'
953
+ // },
954
+ // ...
955
+ // ]
956
+ // }
957
+ // }
958
+ // }
959
+ //
960
+ const data = this.safeDict(response, 'data', {});
961
+ const data2 = this.safeDict(data, 'data', {});
962
+ const resources = this.safeList(data2, 'resources', []);
963
+ const result = {};
964
+ for (let i = 0; i < resources.length; i++) {
965
+ const resource = resources[i];
966
+ const enabled = this.safeString(resource, 'deposit_status');
967
+ if (enabled === 'enabled') {
968
+ const parsedAddress = this.parseDepositAddress(resource, currency);
969
+ result[parsedAddress['currency']] = parsedAddress;
970
+ }
971
+ }
972
+ return result;
973
+ }
974
+ parseDepositAddress(depositAddress, currency = undefined) {
975
+ //
976
+ // {
977
+ // chain_name: 'TRC20',
978
+ // currency_id: 'usdt',
979
+ // address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
980
+ // memo: '',
981
+ // deposit_status: 'enabled'
982
+ // }
983
+ //
984
+ const address = this.safeString(depositAddress, 'address');
985
+ this.checkAddress(address);
986
+ const currencyId = this.safeString(depositAddress, 'currency_id');
987
+ const networkId = this.safeString(depositAddress, 'chain_name');
988
+ return {
989
+ 'info': depositAddress,
990
+ 'currency': this.safeCurrencyCode(currencyId, currency),
991
+ 'address': address,
992
+ 'tag': this.safeString(depositAddress, 'memo'),
993
+ 'network': this.networkIdToCode(networkId),
994
+ };
995
+ }
916
996
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
917
997
  let url = this.urls['api']['rest'] + '/' + this.version + '/' + this.implodeParams(path, params);
918
998
  const query = this.omit(params, this.extractParams(path));
package/js/src/okx.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/okx.js';
2
- import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion, CancellationRequest, Dict, Position, CrossBorrowRate, CrossBorrowRates, LeverageTier, int, LedgerEntry } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage, Num, Account, OptionChain, Option, MarginModification, TradingFeeInterface, Currencies, Conversion, CancellationRequest, Dict, Position, CrossBorrowRate, CrossBorrowRates, LeverageTier, int, LedgerEntry, FundingRate } from './base/types.js';
3
3
  /**
4
4
  * @class okx
5
5
  * @augments Exchange
@@ -88,44 +88,9 @@ export default class okx extends Exchange {
88
88
  body: any;
89
89
  headers: any;
90
90
  };
91
- parseFundingRate(contract: any, market?: Market): {
92
- info: any;
93
- symbol: string;
94
- markPrice: any;
95
- indexPrice: any;
96
- interestRate: number;
97
- estimatedSettlePrice: any;
98
- timestamp: any;
99
- datetime: any;
100
- fundingRate: number;
101
- fundingTimestamp: number;
102
- fundingDatetime: string;
103
- nextFundingRate: number;
104
- nextFundingTimestamp: number;
105
- nextFundingDatetime: string;
106
- previousFundingRate: any;
107
- previousFundingTimestamp: any;
108
- previousFundingDatetime: any;
109
- };
110
- fetchFundingRate(symbol: string, params?: {}): Promise<{
111
- info: any;
112
- symbol: string;
113
- markPrice: any;
114
- indexPrice: any;
115
- interestRate: number;
116
- estimatedSettlePrice: any;
117
- timestamp: any;
118
- datetime: any;
119
- fundingRate: number;
120
- fundingTimestamp: number;
121
- fundingDatetime: string;
122
- nextFundingRate: number;
123
- nextFundingTimestamp: number;
124
- nextFundingDatetime: string;
125
- previousFundingRate: any;
126
- previousFundingTimestamp: any;
127
- previousFundingDatetime: any;
128
- }>;
91
+ parseFundingRate(contract: any, market?: Market): FundingRate;
92
+ parseFundingInterval(interval: any): string;
93
+ fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
129
94
  fetchFundingHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingHistory[]>;
130
95
  setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
131
96
  fetchPositionMode(symbol?: Str, params?: {}): Promise<{
package/js/src/okx.js CHANGED
@@ -6052,6 +6052,9 @@ export default class okx extends Exchange {
6052
6052
  const symbol = this.safeSymbol(marketId, market);
6053
6053
  const nextFundingRate = this.safeNumber(contract, 'nextFundingRate');
6054
6054
  const fundingTime = this.safeInteger(contract, 'fundingTime');
6055
+ const fundingTimeString = this.safeString(contract, 'fundingTime');
6056
+ const nextFundingTimeString = this.safeString(contract, 'nextFundingRate');
6057
+ const millisecondsInterval = Precise.stringSub(nextFundingTimeString, fundingTimeString);
6055
6058
  // https://www.okx.com/support/hc/en-us/articles/360053909272-Ⅸ-Introduction-to-perpetual-swap-funding-fee
6056
6059
  // > The current interest is 0.
6057
6060
  return {
@@ -6072,8 +6075,19 @@ export default class okx extends Exchange {
6072
6075
  'previousFundingRate': undefined,
6073
6076
  'previousFundingTimestamp': undefined,
6074
6077
  'previousFundingDatetime': undefined,
6078
+ 'interval': this.parseFundingInterval(millisecondsInterval),
6075
6079
  };
6076
6080
  }
6081
+ parseFundingInterval(interval) {
6082
+ const intervals = {
6083
+ '3600000': '1h',
6084
+ '14400000': '4h',
6085
+ '28800000': '8h',
6086
+ '57600000': '16h',
6087
+ '86400000': '24h',
6088
+ };
6089
+ return this.safeString(intervals, interval, interval);
6090
+ }
6077
6091
  async fetchFundingRate(symbol, params = {}) {
6078
6092
  /**
6079
6093
  * @method
package/js/src/oxfun.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/oxfun.js';
2
- import type { Account, Balances, Currencies, Currency, Int, Market, Num, OHLCV, Order, OrderBook, OrderType, OrderSide, OrderRequest, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry } from './base/types.js';
2
+ import type { Account, Balances, Currencies, Currency, Int, Market, Num, OHLCV, Order, OrderBook, OrderType, OrderSide, OrderRequest, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry, FundingRate, FundingRates } from './base/types.js';
3
3
  /**
4
4
  * @class oxfun
5
5
  * @augments Exchange
@@ -16,26 +16,8 @@ export default class oxfun extends Exchange {
16
16
  fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
17
17
  parseOHLCV(ohlcv: any, market?: Market): OHLCV;
18
18
  fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
19
- fetchFundingRates(symbols?: Strings, params?: {}): Promise<any>;
20
- parseFundingRate(fundingRate: any, market?: Market): {
21
- info: any;
22
- symbol: string;
23
- markPrice: any;
24
- indexPrice: any;
25
- interestRate: number;
26
- estimatedSettlePrice: any;
27
- timestamp: number;
28
- datetime: string;
29
- fundingRate: number;
30
- fundingTimestamp: any;
31
- fundingDatetime: any;
32
- nextFundingRate: any;
33
- nextFundingTimestamp: any;
34
- nextFundingDatetime: any;
35
- previousFundingRate: any;
36
- previousFundingTimestamp: any;
37
- previousFundingDatetime: any;
38
- };
19
+ fetchFundingRates(symbols?: Strings, params?: {}): Promise<FundingRates>;
20
+ parseFundingRate(fundingRate: any, market?: Market): FundingRate;
39
21
  fetchFundingRateHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").FundingRateHistory[]>;
40
22
  parseFundingRateHistory(info: any, market?: Market): {
41
23
  info: any;
package/js/src/oxfun.js CHANGED
@@ -70,7 +70,7 @@ export default class oxfun extends Exchange {
70
70
  'fetchDepositWithdrawFee': false,
71
71
  'fetchDepositWithdrawFees': false,
72
72
  'fetchFundingHistory': true,
73
- 'fetchFundingRate': false,
73
+ 'fetchFundingRate': 'emulated',
74
74
  'fetchFundingRateHistory': true,
75
75
  'fetchFundingRates': true,
76
76
  'fetchIndexOHLCV': false,
@@ -1004,8 +1004,8 @@ export default class oxfun extends Exchange {
1004
1004
  /**
1005
1005
  * @method
1006
1006
  * @name oxfun#fetchFundingRates
1007
+ * @description fetch the current funding rates for multiple markets
1007
1008
  * @see https://docs.ox.fun/?json#get-v3-funding-estimates
1008
- * @description fetch the current funding rates
1009
1009
  * @param {string[]} symbols unified market symbols
1010
1010
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1011
1011
  * @returns {Order[]} an array of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -1041,8 +1041,7 @@ export default class oxfun extends Exchange {
1041
1041
  // "marketCode": "OX-USD-SWAP-LIN",
1042
1042
  // "fundingAt": "1715515200000",
1043
1043
  // "estFundingRate": "0.000200000"
1044
- // },
1045
- //
1044
+ // }
1046
1045
  //
1047
1046
  const symbol = this.safeString(fundingRate, 'marketCode');
1048
1047
  market = this.market(symbol);
@@ -1065,6 +1064,7 @@ export default class oxfun extends Exchange {
1065
1064
  'previousFundingRate': undefined,
1066
1065
  'previousFundingTimestamp': undefined,
1067
1066
  'previousFundingDatetime': undefined,
1067
+ 'interval': undefined,
1068
1068
  };
1069
1069
  }
1070
1070
  async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/phemex.js';
2
- import type { TransferEntry, Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarginModification, Currencies, Dict, LeverageTier, LeverageTiers, int } from './base/types.js';
2
+ import type { TransferEntry, Balances, Currency, FundingHistory, FundingRateHistory, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, MarginModification, Currencies, Dict, LeverageTier, LeverageTiers, int, FundingRate } from './base/types.js';
3
3
  /**
4
4
  * @class phemex
5
5
  * @augments Exchange
@@ -62,44 +62,8 @@ export default class phemex extends Exchange {
62
62
  parsePosition(position: Dict, market?: Market): import("./base/types.js").Position;
63
63
  fetchFundingHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<FundingHistory[]>;
64
64
  parseFundingFeeToPrecision(value: any, market?: Market, currencyCode?: Str): any;
65
- fetchFundingRate(symbol: string, params?: {}): Promise<{
66
- info: any;
67
- symbol: string;
68
- markPrice: any;
69
- indexPrice: any;
70
- interestRate: any;
71
- estimatedSettlePrice: any;
72
- timestamp: number;
73
- datetime: string;
74
- fundingRate: any;
75
- fundingTimestamp: any;
76
- fundingDatetime: any;
77
- nextFundingRate: any;
78
- nextFundingTimestamp: any;
79
- nextFundingDatetime: any;
80
- previousFundingRate: any;
81
- previousFundingTimestamp: any;
82
- previousFundingDatetime: any;
83
- }>;
84
- parseFundingRate(contract: any, market?: Market): {
85
- info: any;
86
- symbol: string;
87
- markPrice: any;
88
- indexPrice: any;
89
- interestRate: any;
90
- estimatedSettlePrice: any;
91
- timestamp: number;
92
- datetime: string;
93
- fundingRate: any;
94
- fundingTimestamp: any;
95
- fundingDatetime: any;
96
- nextFundingRate: any;
97
- nextFundingTimestamp: any;
98
- nextFundingDatetime: any;
99
- previousFundingRate: any;
100
- previousFundingTimestamp: any;
101
- previousFundingDatetime: any;
102
- };
65
+ fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;
66
+ parseFundingRate(contract: any, market?: Market): FundingRate;
103
67
  setMargin(symbol: string, amount: number, params?: {}): Promise<MarginModification>;
104
68
  parseMarginStatus(status: any): string;
105
69
  parseMarginModification(data: Dict, market?: Market): MarginModification;
package/js/src/phemex.js CHANGED
@@ -4131,6 +4131,7 @@ export default class phemex extends Exchange {
4131
4131
  'previousFundingRate': undefined,
4132
4132
  'previousFundingTimestamp': undefined,
4133
4133
  'previousFundingDatetime': undefined,
4134
+ 'interval': undefined,
4134
4135
  };
4135
4136
  }
4136
4137
  async setMargin(symbol, amount, params = {}) {