ccxt 4.3.40 → 4.3.42

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 (96) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/binance.js +3 -0
  5. package/dist/cjs/src/bitfinex2.js +1 -1
  6. package/dist/cjs/src/bithumb.js +9 -1
  7. package/dist/cjs/src/bitmart.js +196 -100
  8. package/dist/cjs/src/bitstamp.js +38 -2
  9. package/dist/cjs/src/blockchaincom.js +11 -7
  10. package/dist/cjs/src/coinex.js +1 -1
  11. package/dist/cjs/src/coinlist.js +20 -1
  12. package/dist/cjs/src/coinmate.js +19 -3
  13. package/dist/cjs/src/coinone.js +1 -1
  14. package/dist/cjs/src/coinspot.js +13 -2
  15. package/dist/cjs/src/independentreserve.js +33 -1
  16. package/dist/cjs/src/indodax.js +43 -2
  17. package/dist/cjs/src/kraken.js +30 -3
  18. package/dist/cjs/src/krakenfutures.js +56 -1
  19. package/dist/cjs/src/kucoin.js +59 -2
  20. package/dist/cjs/src/okx.js +7 -0
  21. package/dist/cjs/src/pro/alpaca.js +5 -5
  22. package/dist/cjs/src/pro/ascendex.js +3 -3
  23. package/dist/cjs/src/pro/bingx.js +293 -47
  24. package/dist/cjs/src/pro/bitget.js +14 -6
  25. package/dist/cjs/src/pro/bitrue.js +3 -4
  26. package/dist/cjs/src/pro/currencycom.js +6 -5
  27. package/dist/cjs/src/pro/exmo.js +5 -6
  28. package/dist/cjs/src/pro/gemini.js +4 -3
  29. package/dist/cjs/src/pro/independentreserve.js +7 -7
  30. package/dist/cjs/src/pro/lbank.js +4 -4
  31. package/dist/cjs/src/pro/mexc.js +1 -1
  32. package/dist/cjs/src/pro/phemex.js +5 -5
  33. package/dist/cjs/src/pro/probit.js +4 -4
  34. package/dist/cjs/src/pro/upbit.js +322 -2
  35. package/dist/cjs/src/pro/wazirx.js +12 -12
  36. package/dist/cjs/src/pro/woo.js +2 -2
  37. package/dist/cjs/src/upbit.js +17 -9
  38. package/dist/cjs/src/woo.js +6 -2
  39. package/js/ccxt.d.ts +1 -1
  40. package/js/ccxt.js +1 -1
  41. package/js/src/abstract/binance.d.ts +2 -0
  42. package/js/src/abstract/binancecoinm.d.ts +2 -0
  43. package/js/src/abstract/binanceus.d.ts +2 -0
  44. package/js/src/abstract/binanceusdm.d.ts +2 -0
  45. package/js/src/abstract/okx.d.ts +7 -0
  46. package/js/src/binance.js +3 -0
  47. package/js/src/bitfinex2.js +1 -1
  48. package/js/src/bithumb.d.ts +2 -2
  49. package/js/src/bithumb.js +9 -1
  50. package/js/src/bitmart.js +196 -100
  51. package/js/src/bitstamp.d.ts +2 -2
  52. package/js/src/bitstamp.js +38 -2
  53. package/js/src/blockchaincom.d.ts +2 -8
  54. package/js/src/blockchaincom.js +11 -7
  55. package/js/src/coinex.js +1 -1
  56. package/js/src/coinlist.d.ts +1 -1
  57. package/js/src/coinlist.js +20 -1
  58. package/js/src/coinmate.d.ts +1 -3
  59. package/js/src/coinmate.js +19 -3
  60. package/js/src/coinone.d.ts +1 -1
  61. package/js/src/coinone.js +1 -1
  62. package/js/src/coinspot.d.ts +1 -1
  63. package/js/src/coinspot.js +13 -2
  64. package/js/src/independentreserve.d.ts +1 -1
  65. package/js/src/independentreserve.js +33 -1
  66. package/js/src/indodax.d.ts +1 -1
  67. package/js/src/indodax.js +43 -2
  68. package/js/src/kraken.d.ts +3 -3
  69. package/js/src/kraken.js +30 -3
  70. package/js/src/krakenfutures.d.ts +1 -1
  71. package/js/src/krakenfutures.js +56 -1
  72. package/js/src/kucoin.d.ts +1 -1
  73. package/js/src/kucoin.js +59 -2
  74. package/js/src/okx.js +7 -0
  75. package/js/src/pro/alpaca.js +5 -5
  76. package/js/src/pro/ascendex.js +3 -3
  77. package/js/src/pro/bingx.d.ts +6 -1
  78. package/js/src/pro/bingx.js +294 -48
  79. package/js/src/pro/bitget.js +14 -6
  80. package/js/src/pro/bitrue.js +3 -4
  81. package/js/src/pro/currencycom.js +6 -5
  82. package/js/src/pro/exmo.js +5 -6
  83. package/js/src/pro/gemini.js +4 -3
  84. package/js/src/pro/independentreserve.js +7 -7
  85. package/js/src/pro/lbank.js +4 -4
  86. package/js/src/pro/mexc.js +1 -1
  87. package/js/src/pro/phemex.js +5 -5
  88. package/js/src/pro/probit.js +4 -4
  89. package/js/src/pro/upbit.d.ts +13 -1
  90. package/js/src/pro/upbit.js +323 -3
  91. package/js/src/pro/wazirx.js +12 -12
  92. package/js/src/pro/woo.js +2 -2
  93. package/js/src/upbit.js +17 -9
  94. package/js/src/woo.d.ts +1 -1
  95. package/js/src/woo.js +6 -2
  96. package/package.json +1 -1
package/js/src/binance.js CHANGED
@@ -239,6 +239,9 @@ export default class binance extends Exchange {
239
239
  // UID (sapi) request rate limit of 180 000 per minute
240
240
  // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000
241
241
  'get': {
242
+ // copy trading
243
+ 'copyTrading/futures/userStatus': 2,
244
+ 'copyTrading/futures/leadSymbol': 2,
242
245
  'system/status': 0.1,
243
246
  // these endpoints require this.apiKey
244
247
  'accountSnapshot': 240,
@@ -1724,7 +1724,7 @@ export default class bitfinex2 extends Exchange {
1724
1724
  }
1725
1725
  const orders = this.safeList(response, 4, []);
1726
1726
  const order = this.safeList(orders, 0);
1727
- return this.parseOrder(order, market);
1727
+ return this.parseOrder(this.extend({ 'result': order }), market);
1728
1728
  }
1729
1729
  async createOrders(orders, params = {}) {
1730
1730
  /**
@@ -24,8 +24,8 @@ export default class bithumb extends Exchange {
24
24
  parseOrderStatus(status: Str): string;
25
25
  parseOrder(order: Dict, market?: Market): Order;
26
26
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
27
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
28
- cancelUnifiedOrder(order: any, params?: {}): Promise<any>;
27
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
28
+ cancelUnifiedOrder(order: any, params?: {}): Promise<Order>;
29
29
  withdraw(code: string, amount: number, address: string, tag?: any, params?: {}): Promise<Transaction>;
30
30
  parseTransaction(transaction: Dict, currency?: Currency): Transaction;
31
31
  fixCommaNumber(numberStr: any): any;
package/js/src/bithumb.js CHANGED
@@ -969,7 +969,15 @@ export default class bithumb extends Exchange {
969
969
  'order_currency': market['base'],
970
970
  'payment_currency': market['quote'],
971
971
  };
972
- return await this.privatePostTradeCancel(this.extend(request, params));
972
+ const response = await this.privatePostTradeCancel(this.extend(request, params));
973
+ //
974
+ // {
975
+ // 'status': 'string',
976
+ // }
977
+ //
978
+ return this.safeOrder({
979
+ 'info': response,
980
+ });
973
981
  }
974
982
  async cancelUnifiedOrder(order, params = {}) {
975
983
  const request = {
package/js/src/bitmart.js CHANGED
@@ -1130,27 +1130,46 @@ export default class bitmart extends Exchange {
1130
1130
  }
1131
1131
  parseTicker(ticker, market = undefined) {
1132
1132
  //
1133
- // spot (REST)
1133
+ // spot (REST) fetchTickers
1134
1134
  //
1135
- // {
1136
- // "symbol": "SOLAR_USDT",
1137
- // "last_price": "0.020342",
1138
- // "quote_volume_24h": "56817.811802",
1139
- // "base_volume_24h": "2172060",
1140
- // "high_24h": "0.256000",
1141
- // "low_24h": "0.016980",
1142
- // "open_24h": "0.022309",
1143
- // "close_24h": "0.020342",
1144
- // "best_ask": "0.020389",
1145
- // "best_ask_size": "339.000000000000000000000000000000",
1146
- // "best_bid": "0.020342",
1147
- // "best_bid_size": "3369.000000000000000000000000000000",
1148
- // "fluctuation": "-0.0882",
1149
- // "url": "https://www.bitmart.com/trade?symbol=SOLAR_USDT",
1150
- // "timestamp": 1667403439367
1151
- // }
1135
+ // {
1136
+ // 'result': [
1137
+ // "AFIN_USDT", // symbol
1138
+ // "0.001047", // last
1139
+ // "11110", // v_24h
1140
+ // "11.632170", // qv_24h
1141
+ // "0.001048", // open_24h
1142
+ // "0.001048", // high_24h
1143
+ // "0.001047", // low_24h
1144
+ // "-0.00095", // price_change_24h
1145
+ // "0.001029", // bid_px
1146
+ // "5555", // bid_sz
1147
+ // "0.001041", // ask_px
1148
+ // "5297", // ask_sz
1149
+ // "1717122550482" // timestamp
1150
+ // ]
1151
+ // }
1152
+ //
1153
+ // spot (REST) fetchTicker
1154
+ //
1155
+ // {
1156
+ // "symbol": "BTC_USDT",
1157
+ // "last": "68500.00",
1158
+ // "v_24h": "10491.65490",
1159
+ // "qv_24h": "717178990.42",
1160
+ // "open_24h": "68149.75",
1161
+ // "high_24h": "69499.99",
1162
+ // "low_24h": "67132.40",
1163
+ // "fluctuation": "0.00514",
1164
+ // "bid_px": "68500",
1165
+ // "bid_sz": "0.00162",
1166
+ // "ask_px": "68500.01",
1167
+ // "ask_sz": "0.01722",
1168
+ // "ts": "1717131391671"
1169
+ // }
1152
1170
  //
1153
1171
  // spot (WS)
1172
+ //
1154
1173
  // {
1155
1174
  // "symbol":"BTC_USDT",
1156
1175
  // "last_price":"146.24",
@@ -1176,21 +1195,47 @@ export default class bitmart extends Exchange {
1176
1195
  // "legal_coin_price":"0.1302699"
1177
1196
  // }
1178
1197
  //
1179
- let timestamp = this.safeInteger(ticker, 'timestamp');
1198
+ const result = this.safeList(ticker, 'result', []);
1199
+ const average = this.safeString2(ticker, 'avg_price', 'index_price');
1200
+ let marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1201
+ let timestamp = this.safeInteger2(ticker, 'timestamp', 'ts');
1202
+ let last = this.safeString2(ticker, 'last_price', 'last');
1203
+ let percentage = this.safeString(ticker, 'price_change_percent_24h');
1204
+ let change = this.safeString(ticker, 'fluctuation');
1205
+ let high = this.safeString2(ticker, 'high_24h', 'high_price');
1206
+ let low = this.safeString2(ticker, 'low_24h', 'low_price');
1207
+ let bid = this.safeString2(ticker, 'best_bid', 'bid_px');
1208
+ let bidVolume = this.safeString2(ticker, 'best_bid_size', 'bid_sz');
1209
+ let ask = this.safeString2(ticker, 'best_ask', 'ask_px');
1210
+ let askVolume = this.safeString2(ticker, 'best_ask_size', 'ask_sz');
1211
+ let open = this.safeString(ticker, 'open_24h');
1212
+ let baseVolume = this.safeString2(ticker, 'base_volume_24h', 'v_24h');
1213
+ let quoteVolume = this.safeStringLower2(ticker, 'quote_volume_24h', 'qv_24h');
1214
+ const listMarketId = this.safeString(result, 0);
1215
+ if (listMarketId !== undefined) {
1216
+ marketId = listMarketId;
1217
+ timestamp = this.safeInteger(result, 12);
1218
+ high = this.safeString(result, 5);
1219
+ low = this.safeString(result, 6);
1220
+ bid = this.safeString(result, 8);
1221
+ bidVolume = this.safeString(result, 9);
1222
+ ask = this.safeString(result, 10);
1223
+ askVolume = this.safeString(result, 11);
1224
+ open = this.safeString(result, 4);
1225
+ last = this.safeString(result, 1);
1226
+ change = this.safeString(result, 7);
1227
+ baseVolume = this.safeString(result, 2);
1228
+ quoteVolume = this.safeStringLower(result, 3);
1229
+ }
1230
+ market = this.safeMarket(marketId, market);
1231
+ const symbol = market['symbol'];
1180
1232
  if (timestamp === undefined) {
1181
1233
  // ticker from WS has a different field (in seconds)
1182
1234
  timestamp = this.safeIntegerProduct(ticker, 's_t', 1000);
1183
1235
  }
1184
- const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1185
- market = this.safeMarket(marketId, market);
1186
- const symbol = market['symbol'];
1187
- const last = this.safeString2(ticker, 'close_24h', 'last_price');
1188
- let percentage = this.safeString(ticker, 'price_change_percent_24h');
1189
1236
  if (percentage === undefined) {
1190
- percentage = Precise.stringMul(this.safeString(ticker, 'fluctuation'), '100');
1237
+ percentage = Precise.stringMul(change, '100');
1191
1238
  }
1192
- let baseVolume = this.safeString(ticker, 'base_volume_24h');
1193
- let quoteVolume = this.safeString(ticker, 'quote_volume_24h');
1194
1239
  if (quoteVolume === undefined) {
1195
1240
  if (baseVolume === undefined) {
1196
1241
  // this is swap
@@ -1203,25 +1248,22 @@ export default class bitmart extends Exchange {
1203
1248
  baseVolume = undefined;
1204
1249
  }
1205
1250
  }
1206
- const average = this.safeString2(ticker, 'avg_price', 'index_price');
1207
- const high = this.safeString2(ticker, 'high_24h', 'high_price');
1208
- const low = this.safeString2(ticker, 'low_24h', 'low_price');
1209
1251
  return this.safeTicker({
1210
1252
  'symbol': symbol,
1211
1253
  'timestamp': timestamp,
1212
1254
  'datetime': this.iso8601(timestamp),
1213
1255
  'high': high,
1214
1256
  'low': low,
1215
- 'bid': this.safeString(ticker, 'best_bid'),
1216
- 'bidVolume': this.safeString(ticker, 'best_bid_size'),
1217
- 'ask': this.safeString(ticker, 'best_ask'),
1218
- 'askVolume': this.safeString(ticker, 'best_ask_size'),
1257
+ 'bid': bid,
1258
+ 'bidVolume': bidVolume,
1259
+ 'ask': ask,
1260
+ 'askVolume': askVolume,
1219
1261
  'vwap': undefined,
1220
- 'open': this.safeString(ticker, 'open_24h'),
1262
+ 'open': open,
1221
1263
  'close': last,
1222
1264
  'last': last,
1223
1265
  'previousClose': undefined,
1224
- 'change': undefined,
1266
+ 'change': change,
1225
1267
  'percentage': percentage,
1226
1268
  'average': average,
1227
1269
  'baseVolume': baseVolume,
@@ -1234,6 +1276,7 @@ export default class bitmart extends Exchange {
1234
1276
  * @method
1235
1277
  * @name bitmart#fetchTicker
1236
1278
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1279
+ * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-a-trading-pair-v3
1237
1280
  * @param {string} symbol unified symbol of the market to fetch the ticker for
1238
1281
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1239
1282
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -1245,78 +1288,72 @@ export default class bitmart extends Exchange {
1245
1288
  if (market['swap']) {
1246
1289
  request['contract_symbol'] = market['id'];
1247
1290
  response = await this.publicGetContractV1Tickers(this.extend(request, params));
1291
+ //
1292
+ // {
1293
+ // "message":"OK",
1294
+ // "code":1000,
1295
+ // "trace":"4a0ebceb-d3f7-45a3-8feb-f61e230e24cd",
1296
+ // "data":{
1297
+ // "tickers":[
1298
+ // {
1299
+ // "contract_symbol":"DOGEUSDT",
1300
+ // "last_price":"0.130180",
1301
+ // "index_price":"0.13028635",
1302
+ // "last_funding_rate":"0.00002025",
1303
+ // "price_change_percent_24h":"-2.326",
1304
+ // "volume_24h":"116789313.01797258",
1305
+ // "url":"https://futures.bitmart.com/en?symbol=DOGEUSDT",
1306
+ // "high_price":"0.134520",
1307
+ // "low_price":"0.128570",
1308
+ // "legal_coin_price":"0.13017401"
1309
+ // }
1310
+ // ]
1311
+ // }
1312
+ // }
1313
+ //
1248
1314
  }
1249
1315
  else if (market['spot']) {
1250
1316
  request['symbol'] = market['id'];
1251
- response = await this.publicGetSpotV1Ticker(this.extend(request, params));
1317
+ response = await this.publicGetSpotQuotationV3Ticker(this.extend(request, params));
1318
+ //
1319
+ // {
1320
+ // "code": 1000,
1321
+ // "trace": "f2194c2c202d2.99.1717535",
1322
+ // "message": "success",
1323
+ // "data": {
1324
+ // "symbol": "BTC_USDT",
1325
+ // "last": "68500.00",
1326
+ // "v_24h": "10491.65490",
1327
+ // "qv_24h": "717178990.42",
1328
+ // "open_24h": "68149.75",
1329
+ // "high_24h": "69499.99",
1330
+ // "low_24h": "67132.40",
1331
+ // "fluctuation": "0.00514",
1332
+ // "bid_px": "68500",
1333
+ // "bid_sz": "0.00162",
1334
+ // "ask_px": "68500.01",
1335
+ // "ask_sz": "0.01722",
1336
+ // "ts": "1717131391671"
1337
+ // }
1338
+ // }
1339
+ //
1252
1340
  }
1253
1341
  else {
1254
1342
  throw new NotSupported(this.id + ' fetchTicker() does not support ' + market['type'] + ' markets, only spot and swap markets are accepted');
1255
1343
  }
1256
- //
1257
- // spot
1258
- //
1259
- // {
1260
- // "message":"OK",
1261
- // "code":1000,
1262
- // "trace":"6aa5b923-2f57-46e3-876d-feca190e0b82",
1263
- // "data":{
1264
- // "tickers":[
1265
- // {
1266
- // "symbol":"ETH_BTC",
1267
- // "last_price":"0.036037",
1268
- // "quote_volume_24h":"4380.6660000000",
1269
- // "base_volume_24h":"159.3582006712",
1270
- // "high_24h":"0.036972",
1271
- // "low_24h":"0.035524",
1272
- // "open_24h":"0.036561",
1273
- // "close_24h":"0.036037",
1274
- // "best_ask":"0.036077",
1275
- // "best_ask_size":"9.9500",
1276
- // "best_bid":"0.035983",
1277
- // "best_bid_size":"4.2792",
1278
- // "fluctuation":"-0.0143",
1279
- // "url":"https://www.bitmart.com/trade?symbol=ETH_BTC"
1280
- // }
1281
- // ]
1282
- // }
1283
- // }
1284
- //
1285
- // swap
1286
- //
1287
- // {
1288
- // "message":"OK",
1289
- // "code":1000,
1290
- // "trace":"4a0ebceb-d3f7-45a3-8feb-f61e230e24cd",
1291
- // "data":{
1292
- // "tickers":[
1293
- // {
1294
- // "contract_symbol":"DOGEUSDT",
1295
- // "last_price":"0.130180",
1296
- // "index_price":"0.13028635",
1297
- // "last_funding_rate":"0.00002025",
1298
- // "price_change_percent_24h":"-2.326",
1299
- // "volume_24h":"116789313.01797258",
1300
- // "url":"https://futures.bitmart.com/en?symbol=DOGEUSDT",
1301
- // "high_price":"0.134520",
1302
- // "low_price":"0.128570",
1303
- // "legal_coin_price":"0.13017401"
1304
- // }
1305
- // ]
1306
- // }
1307
- // }
1308
- //
1309
- const data = this.safeValue(response, 'data', {});
1310
- const tickers = this.safeValue(data, 'tickers', []);
1311
1344
  // fails in naming for contract tickers 'contract_symbol'
1312
1345
  let tickersById = undefined;
1346
+ let tickers = [];
1347
+ let ticker = {};
1313
1348
  if (market['spot']) {
1314
- tickersById = this.indexBy(tickers, 'symbol');
1349
+ ticker = this.safeDict(response, 'data', {});
1315
1350
  }
1316
- else if (market['swap']) {
1351
+ else {
1352
+ const data = this.safeDict(response, 'data', {});
1353
+ tickers = this.safeList(data, 'tickers', []);
1317
1354
  tickersById = this.indexBy(tickers, 'contract_symbol');
1355
+ ticker = this.safeDict(tickersById, market['id']);
1318
1356
  }
1319
- const ticker = this.safeDict(tickersById, market['id']);
1320
1357
  return this.parseTicker(ticker, market);
1321
1358
  }
1322
1359
  async fetchTickers(symbols = undefined, params = {}) {
@@ -1324,7 +1361,7 @@ export default class bitmart extends Exchange {
1324
1361
  * @method
1325
1362
  * @name bitmart#fetchTickers
1326
1363
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1327
- * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-all-pairs-v2
1364
+ * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-all-pairs-v3
1328
1365
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1329
1366
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1330
1367
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -1340,19 +1377,78 @@ export default class bitmart extends Exchange {
1340
1377
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1341
1378
  let response = undefined;
1342
1379
  if (type === 'spot') {
1343
- response = await this.publicGetSpotV2Ticker(params);
1380
+ response = await this.publicGetSpotQuotationV3Tickers(params);
1381
+ //
1382
+ // {
1383
+ // "code": 1000,
1384
+ // "trace": "17c5e5d9ac49f9b71efca2bed55f1a.105.171225637482393",
1385
+ // "message": "success",
1386
+ // "data": [
1387
+ // [
1388
+ // "AFIN_USDT",
1389
+ // "0.001047",
1390
+ // "11110",
1391
+ // "11.632170",
1392
+ // "0.001048",
1393
+ // "0.001048",
1394
+ // "0.001047",
1395
+ // "-0.00095",
1396
+ // "0.001029",
1397
+ // "5555",
1398
+ // "0.001041",
1399
+ // "5297",
1400
+ // "1717122550482"
1401
+ // ],
1402
+ // ]
1403
+ // }
1404
+ //
1344
1405
  }
1345
1406
  else if (type === 'swap') {
1346
1407
  response = await this.publicGetContractV1Tickers(params);
1408
+ //
1409
+ // {
1410
+ // "message": "OK",
1411
+ // "code": 1000,
1412
+ // "trace": "c1dec681c24ea5d.105.171712565",
1413
+ // "data": {
1414
+ // "tickers": [
1415
+ // {
1416
+ // "contract_symbol": "SNTUSDT",
1417
+ // "last_price": "0.0366600",
1418
+ // "index_price": "0.03587373",
1419
+ // "last_funding_rate": "0.00005000",
1420
+ // "price_change_percent_24h": "-2.629",
1421
+ // "volume_24h": "10102540.19909109848",
1422
+ // "url": "https://futures.bitmart.com/en?symbol=SNTUSDT",
1423
+ // "high_price": "0.0405600",
1424
+ // "low_price": "0.0355000",
1425
+ // "legal_coin_price": "0.03666697"
1426
+ // },
1427
+ // ]
1428
+ // }
1429
+ // }
1430
+ //
1347
1431
  }
1348
1432
  else {
1349
1433
  throw new NotSupported(this.id + ' fetchTickers() does not support ' + type + ' markets, only spot and swap markets are accepted');
1350
1434
  }
1351
- const data = this.safeValue(response, 'data', {});
1352
- const tickers = this.safeValue(data, 'tickers', []);
1435
+ let tickers = [];
1436
+ if (type === 'spot') {
1437
+ tickers = this.safeList(response, 'data', []);
1438
+ }
1439
+ else {
1440
+ const data = this.safeDict(response, 'data', {});
1441
+ tickers = this.safeList(data, 'tickers', []);
1442
+ }
1353
1443
  const result = {};
1354
1444
  for (let i = 0; i < tickers.length; i++) {
1355
- const ticker = this.parseTicker(tickers[i]);
1445
+ let ticker = {};
1446
+ if (type === 'spot') {
1447
+ ticker = this.parseTicker({ 'result': tickers[i] });
1448
+ }
1449
+ else {
1450
+ ticker = this.parseTicker(tickers[i]);
1451
+ }
1356
1452
  const symbol = ticker['symbol'];
1357
1453
  result[symbol] = ticker;
1358
1454
  }
@@ -61,8 +61,8 @@ export default class bitstamp extends Exchange {
61
61
  fetchDepositWithdrawFees(codes?: any, params?: {}): Promise<any>;
62
62
  parseDepositWithdrawFee(fee: any, currency?: any): any;
63
63
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
64
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
65
- cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
64
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
65
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
66
66
  parseOrderStatus(status: Str): string;
67
67
  fetchOrderStatus(id: string, symbol?: Str, params?: {}): Promise<string>;
68
68
  fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
@@ -1446,7 +1446,17 @@ export default class bitstamp extends Exchange {
1446
1446
  const request = {
1447
1447
  'id': id,
1448
1448
  };
1449
- return await this.privatePostCancelOrder(this.extend(request, params));
1449
+ const response = await this.privatePostCancelOrder(this.extend(request, params));
1450
+ //
1451
+ // {
1452
+ // "id": 1453282316578816,
1453
+ // "amount": "0.02035278",
1454
+ // "price": "2100.45",
1455
+ // "type": 0,
1456
+ // "market": "BTC/USD"
1457
+ // }
1458
+ //
1459
+ return this.parseOrder(response);
1450
1460
  }
1451
1461
  async cancelAllOrders(symbol = undefined, params = {}) {
1452
1462
  /**
@@ -1471,7 +1481,23 @@ export default class bitstamp extends Exchange {
1471
1481
  else {
1472
1482
  response = await this.privatePostCancelAllOrders(this.extend(request, params));
1473
1483
  }
1474
- return response;
1484
+ //
1485
+ // {
1486
+ // "canceled": [
1487
+ // {
1488
+ // "id": 1453282316578816,
1489
+ // "amount": "0.02035278",
1490
+ // "price": "2100.45",
1491
+ // "type": 0,
1492
+ // "currency_pair": "BTC/USD",
1493
+ // "market": "BTC/USD"
1494
+ // }
1495
+ // ],
1496
+ // "success": true
1497
+ // }
1498
+ //
1499
+ const canceled = this.safeList(response, 'canceled');
1500
+ return this.parseOrders(canceled);
1475
1501
  }
1476
1502
  parseOrderStatus(status) {
1477
1503
  const statuses = {
@@ -1848,6 +1874,16 @@ export default class bitstamp extends Exchange {
1848
1874
  // "id": "2814205012"
1849
1875
  // }
1850
1876
  //
1877
+ // cancelOrder
1878
+ //
1879
+ // {
1880
+ // "id": 1453282316578816,
1881
+ // "amount": "0.02035278",
1882
+ // "price": "2100.45",
1883
+ // "type": 0,
1884
+ // "market": "BTC/USD"
1885
+ // }
1886
+ //
1851
1887
  const id = this.safeString(order, 'id');
1852
1888
  const clientOrderId = this.safeString(order, 'client_order_id');
1853
1889
  let side = this.safeString(order, 'type');
@@ -16,14 +16,8 @@ export default class blockchaincom extends Exchange {
16
16
  parseOrderState(state: any): string;
17
17
  parseOrder(order: Dict, market?: Market): Order;
18
18
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
19
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<{
20
- id: string;
21
- info: any;
22
- }>;
23
- cancelAllOrders(symbol?: Str, params?: {}): Promise<{
24
- symbol: string;
25
- info: any;
26
- }>;
19
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
20
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
27
21
  fetchTradingFees(params?: {}): Promise<TradingFees>;
28
22
  fetchCanceledOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
29
23
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -616,17 +616,17 @@ export default class blockchaincom extends Exchange {
616
616
  'orderId': id,
617
617
  };
618
618
  const response = await this.privateDeleteOrdersOrderId(this.extend(request, params));
619
- return {
619
+ return this.safeOrder({
620
620
  'id': id,
621
621
  'info': response,
622
- };
622
+ });
623
623
  }
624
624
  async cancelAllOrders(symbol = undefined, params = {}) {
625
625
  /**
626
626
  * @method
627
627
  * @name blockchaincom#cancelAllOrders
628
628
  * @description cancel all open orders
629
- * @see https://api.blockchain.com/v3/#/trading/deleteAllOrders
629
+ * @see https://api.blockchain.com/v3/#deleteallorders
630
630
  * @param {string} symbol unified market symbol of the market to cancel orders in, all markets are used if undefined, default is undefined
631
631
  * @param {object} [params] extra parameters specific to the exchange API endpoint
632
632
  * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -642,10 +642,14 @@ export default class blockchaincom extends Exchange {
642
642
  request['symbol'] = marketId;
643
643
  }
644
644
  const response = await this.privateDeleteOrders(this.extend(request, params));
645
- return {
646
- 'symbol': symbol,
647
- 'info': response,
648
- };
645
+ //
646
+ // {}
647
+ //
648
+ return [
649
+ this.safeOrder({
650
+ 'info': response,
651
+ }),
652
+ ];
649
653
  }
650
654
  async fetchTradingFees(params = {}) {
651
655
  /**
package/js/src/coinex.js CHANGED
@@ -5789,7 +5789,7 @@ export default class coinex extends Exchange {
5789
5789
  preparedString += nonce + this.secret;
5790
5790
  const signature = this.hash(this.encode(preparedString), sha256);
5791
5791
  headers = {
5792
- 'Content-Type': 'application/json; charset=utf-8',
5792
+ 'Content-Type': 'application/json',
5793
5793
  'Accept': 'application/json',
5794
5794
  'X-COINEX-KEY': this.apiKey,
5795
5795
  'X-COINEX-SIGN': signature,
@@ -42,7 +42,7 @@ export default class coinlist extends Exchange {
42
42
  fetchCanceledOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
43
43
  cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
44
44
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
45
- cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<any>;
45
+ cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<any[]>;
46
46
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
47
47
  editOrder(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: Num, price?: Num, params?: {}): Promise<Order>;
48
48
  parseOrder(order: Dict, market?: Market): Order;
@@ -1458,7 +1458,26 @@ export default class coinlist extends Exchange {
1458
1458
  await this.loadMarkets();
1459
1459
  params = ids;
1460
1460
  const response = await this.privateDeleteV1OrdersBulk(params);
1461
- return response;
1461
+ //
1462
+ // {
1463
+ // "message": "Cancel order requests received.",
1464
+ // "order_ids": [
1465
+ // "ff132955-43bc-4fe5-9d9c-5ba226cc89a0"
1466
+ // ],
1467
+ // "timestamp": "2024-06-01T02:32:30.305Z"
1468
+ // }
1469
+ //
1470
+ const orderIds = this.safeList(response, 'order_ids', []);
1471
+ const orders = [];
1472
+ const datetime = this.safeString(response, 'timestamp');
1473
+ for (let i = 0; i < orderIds.length; i++) {
1474
+ orders.push(this.safeOrder({
1475
+ 'info': orderIds[i],
1476
+ 'id': orderIds[i],
1477
+ 'lastUpdateTimestamp': this.parse8601(datetime),
1478
+ }));
1479
+ }
1480
+ return orders;
1462
1481
  }
1463
1482
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1464
1483
  /**
@@ -28,9 +28,7 @@ export default class coinmate extends Exchange {
28
28
  parseOrder(order: Dict, market?: Market): Order;
29
29
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
30
30
  fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
31
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<{
32
- info: any;
33
- }>;
31
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
34
32
  nonce(): number;
35
33
  sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
36
34
  url: string;