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/dist/cjs/ccxt.js CHANGED
@@ -185,7 +185,7 @@ var woofipro$1 = require('./src/pro/woofipro.js');
185
185
 
186
186
  //-----------------------------------------------------------------------------
187
187
  // this is updated by vss.js when building
188
- const version = '4.3.40';
188
+ const version = '4.3.42';
189
189
  Exchange["default"].ccxtVersion = version;
190
190
  const exchanges = {
191
191
  'ace': ace,
@@ -236,6 +236,9 @@ class binance extends binance$1 {
236
236
  // UID (sapi) request rate limit of 180 000 per minute
237
237
  // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000
238
238
  'get': {
239
+ // copy trading
240
+ 'copyTrading/futures/userStatus': 2,
241
+ 'copyTrading/futures/leadSymbol': 2,
239
242
  'system/status': 0.1,
240
243
  // these endpoints require this.apiKey
241
244
  'accountSnapshot': 240,
@@ -1721,7 +1721,7 @@ class bitfinex2 extends bitfinex2$1 {
1721
1721
  }
1722
1722
  const orders = this.safeList(response, 4, []);
1723
1723
  const order = this.safeList(orders, 0);
1724
- return this.parseOrder(order, market);
1724
+ return this.parseOrder(this.extend({ 'result': order }), market);
1725
1725
  }
1726
1726
  async createOrders(orders, params = {}) {
1727
1727
  /**
@@ -966,7 +966,15 @@ class bithumb extends bithumb$1 {
966
966
  'order_currency': market['base'],
967
967
  'payment_currency': market['quote'],
968
968
  };
969
- return await this.privatePostTradeCancel(this.extend(request, params));
969
+ const response = await this.privatePostTradeCancel(this.extend(request, params));
970
+ //
971
+ // {
972
+ // 'status': 'string',
973
+ // }
974
+ //
975
+ return this.safeOrder({
976
+ 'info': response,
977
+ });
970
978
  }
971
979
  async cancelUnifiedOrder(order, params = {}) {
972
980
  const request = {
@@ -1127,27 +1127,46 @@ class bitmart extends bitmart$1 {
1127
1127
  }
1128
1128
  parseTicker(ticker, market = undefined) {
1129
1129
  //
1130
- // spot (REST)
1130
+ // spot (REST) fetchTickers
1131
1131
  //
1132
- // {
1133
- // "symbol": "SOLAR_USDT",
1134
- // "last_price": "0.020342",
1135
- // "quote_volume_24h": "56817.811802",
1136
- // "base_volume_24h": "2172060",
1137
- // "high_24h": "0.256000",
1138
- // "low_24h": "0.016980",
1139
- // "open_24h": "0.022309",
1140
- // "close_24h": "0.020342",
1141
- // "best_ask": "0.020389",
1142
- // "best_ask_size": "339.000000000000000000000000000000",
1143
- // "best_bid": "0.020342",
1144
- // "best_bid_size": "3369.000000000000000000000000000000",
1145
- // "fluctuation": "-0.0882",
1146
- // "url": "https://www.bitmart.com/trade?symbol=SOLAR_USDT",
1147
- // "timestamp": 1667403439367
1148
- // }
1132
+ // {
1133
+ // 'result': [
1134
+ // "AFIN_USDT", // symbol
1135
+ // "0.001047", // last
1136
+ // "11110", // v_24h
1137
+ // "11.632170", // qv_24h
1138
+ // "0.001048", // open_24h
1139
+ // "0.001048", // high_24h
1140
+ // "0.001047", // low_24h
1141
+ // "-0.00095", // price_change_24h
1142
+ // "0.001029", // bid_px
1143
+ // "5555", // bid_sz
1144
+ // "0.001041", // ask_px
1145
+ // "5297", // ask_sz
1146
+ // "1717122550482" // timestamp
1147
+ // ]
1148
+ // }
1149
+ //
1150
+ // spot (REST) fetchTicker
1151
+ //
1152
+ // {
1153
+ // "symbol": "BTC_USDT",
1154
+ // "last": "68500.00",
1155
+ // "v_24h": "10491.65490",
1156
+ // "qv_24h": "717178990.42",
1157
+ // "open_24h": "68149.75",
1158
+ // "high_24h": "69499.99",
1159
+ // "low_24h": "67132.40",
1160
+ // "fluctuation": "0.00514",
1161
+ // "bid_px": "68500",
1162
+ // "bid_sz": "0.00162",
1163
+ // "ask_px": "68500.01",
1164
+ // "ask_sz": "0.01722",
1165
+ // "ts": "1717131391671"
1166
+ // }
1149
1167
  //
1150
1168
  // spot (WS)
1169
+ //
1151
1170
  // {
1152
1171
  // "symbol":"BTC_USDT",
1153
1172
  // "last_price":"146.24",
@@ -1173,21 +1192,47 @@ class bitmart extends bitmart$1 {
1173
1192
  // "legal_coin_price":"0.1302699"
1174
1193
  // }
1175
1194
  //
1176
- let timestamp = this.safeInteger(ticker, 'timestamp');
1195
+ const result = this.safeList(ticker, 'result', []);
1196
+ const average = this.safeString2(ticker, 'avg_price', 'index_price');
1197
+ let marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1198
+ let timestamp = this.safeInteger2(ticker, 'timestamp', 'ts');
1199
+ let last = this.safeString2(ticker, 'last_price', 'last');
1200
+ let percentage = this.safeString(ticker, 'price_change_percent_24h');
1201
+ let change = this.safeString(ticker, 'fluctuation');
1202
+ let high = this.safeString2(ticker, 'high_24h', 'high_price');
1203
+ let low = this.safeString2(ticker, 'low_24h', 'low_price');
1204
+ let bid = this.safeString2(ticker, 'best_bid', 'bid_px');
1205
+ let bidVolume = this.safeString2(ticker, 'best_bid_size', 'bid_sz');
1206
+ let ask = this.safeString2(ticker, 'best_ask', 'ask_px');
1207
+ let askVolume = this.safeString2(ticker, 'best_ask_size', 'ask_sz');
1208
+ let open = this.safeString(ticker, 'open_24h');
1209
+ let baseVolume = this.safeString2(ticker, 'base_volume_24h', 'v_24h');
1210
+ let quoteVolume = this.safeStringLower2(ticker, 'quote_volume_24h', 'qv_24h');
1211
+ const listMarketId = this.safeString(result, 0);
1212
+ if (listMarketId !== undefined) {
1213
+ marketId = listMarketId;
1214
+ timestamp = this.safeInteger(result, 12);
1215
+ high = this.safeString(result, 5);
1216
+ low = this.safeString(result, 6);
1217
+ bid = this.safeString(result, 8);
1218
+ bidVolume = this.safeString(result, 9);
1219
+ ask = this.safeString(result, 10);
1220
+ askVolume = this.safeString(result, 11);
1221
+ open = this.safeString(result, 4);
1222
+ last = this.safeString(result, 1);
1223
+ change = this.safeString(result, 7);
1224
+ baseVolume = this.safeString(result, 2);
1225
+ quoteVolume = this.safeStringLower(result, 3);
1226
+ }
1227
+ market = this.safeMarket(marketId, market);
1228
+ const symbol = market['symbol'];
1177
1229
  if (timestamp === undefined) {
1178
1230
  // ticker from WS has a different field (in seconds)
1179
1231
  timestamp = this.safeIntegerProduct(ticker, 's_t', 1000);
1180
1232
  }
1181
- const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
1182
- market = this.safeMarket(marketId, market);
1183
- const symbol = market['symbol'];
1184
- const last = this.safeString2(ticker, 'close_24h', 'last_price');
1185
- let percentage = this.safeString(ticker, 'price_change_percent_24h');
1186
1233
  if (percentage === undefined) {
1187
- percentage = Precise["default"].stringMul(this.safeString(ticker, 'fluctuation'), '100');
1234
+ percentage = Precise["default"].stringMul(change, '100');
1188
1235
  }
1189
- let baseVolume = this.safeString(ticker, 'base_volume_24h');
1190
- let quoteVolume = this.safeString(ticker, 'quote_volume_24h');
1191
1236
  if (quoteVolume === undefined) {
1192
1237
  if (baseVolume === undefined) {
1193
1238
  // this is swap
@@ -1200,25 +1245,22 @@ class bitmart extends bitmart$1 {
1200
1245
  baseVolume = undefined;
1201
1246
  }
1202
1247
  }
1203
- const average = this.safeString2(ticker, 'avg_price', 'index_price');
1204
- const high = this.safeString2(ticker, 'high_24h', 'high_price');
1205
- const low = this.safeString2(ticker, 'low_24h', 'low_price');
1206
1248
  return this.safeTicker({
1207
1249
  'symbol': symbol,
1208
1250
  'timestamp': timestamp,
1209
1251
  'datetime': this.iso8601(timestamp),
1210
1252
  'high': high,
1211
1253
  'low': low,
1212
- 'bid': this.safeString(ticker, 'best_bid'),
1213
- 'bidVolume': this.safeString(ticker, 'best_bid_size'),
1214
- 'ask': this.safeString(ticker, 'best_ask'),
1215
- 'askVolume': this.safeString(ticker, 'best_ask_size'),
1254
+ 'bid': bid,
1255
+ 'bidVolume': bidVolume,
1256
+ 'ask': ask,
1257
+ 'askVolume': askVolume,
1216
1258
  'vwap': undefined,
1217
- 'open': this.safeString(ticker, 'open_24h'),
1259
+ 'open': open,
1218
1260
  'close': last,
1219
1261
  'last': last,
1220
1262
  'previousClose': undefined,
1221
- 'change': undefined,
1263
+ 'change': change,
1222
1264
  'percentage': percentage,
1223
1265
  'average': average,
1224
1266
  'baseVolume': baseVolume,
@@ -1231,6 +1273,7 @@ class bitmart extends bitmart$1 {
1231
1273
  * @method
1232
1274
  * @name bitmart#fetchTicker
1233
1275
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1276
+ * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-a-trading-pair-v3
1234
1277
  * @param {string} symbol unified symbol of the market to fetch the ticker for
1235
1278
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1236
1279
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -1242,78 +1285,72 @@ class bitmart extends bitmart$1 {
1242
1285
  if (market['swap']) {
1243
1286
  request['contract_symbol'] = market['id'];
1244
1287
  response = await this.publicGetContractV1Tickers(this.extend(request, params));
1288
+ //
1289
+ // {
1290
+ // "message":"OK",
1291
+ // "code":1000,
1292
+ // "trace":"4a0ebceb-d3f7-45a3-8feb-f61e230e24cd",
1293
+ // "data":{
1294
+ // "tickers":[
1295
+ // {
1296
+ // "contract_symbol":"DOGEUSDT",
1297
+ // "last_price":"0.130180",
1298
+ // "index_price":"0.13028635",
1299
+ // "last_funding_rate":"0.00002025",
1300
+ // "price_change_percent_24h":"-2.326",
1301
+ // "volume_24h":"116789313.01797258",
1302
+ // "url":"https://futures.bitmart.com/en?symbol=DOGEUSDT",
1303
+ // "high_price":"0.134520",
1304
+ // "low_price":"0.128570",
1305
+ // "legal_coin_price":"0.13017401"
1306
+ // }
1307
+ // ]
1308
+ // }
1309
+ // }
1310
+ //
1245
1311
  }
1246
1312
  else if (market['spot']) {
1247
1313
  request['symbol'] = market['id'];
1248
- response = await this.publicGetSpotV1Ticker(this.extend(request, params));
1314
+ response = await this.publicGetSpotQuotationV3Ticker(this.extend(request, params));
1315
+ //
1316
+ // {
1317
+ // "code": 1000,
1318
+ // "trace": "f2194c2c202d2.99.1717535",
1319
+ // "message": "success",
1320
+ // "data": {
1321
+ // "symbol": "BTC_USDT",
1322
+ // "last": "68500.00",
1323
+ // "v_24h": "10491.65490",
1324
+ // "qv_24h": "717178990.42",
1325
+ // "open_24h": "68149.75",
1326
+ // "high_24h": "69499.99",
1327
+ // "low_24h": "67132.40",
1328
+ // "fluctuation": "0.00514",
1329
+ // "bid_px": "68500",
1330
+ // "bid_sz": "0.00162",
1331
+ // "ask_px": "68500.01",
1332
+ // "ask_sz": "0.01722",
1333
+ // "ts": "1717131391671"
1334
+ // }
1335
+ // }
1336
+ //
1249
1337
  }
1250
1338
  else {
1251
1339
  throw new errors.NotSupported(this.id + ' fetchTicker() does not support ' + market['type'] + ' markets, only spot and swap markets are accepted');
1252
1340
  }
1253
- //
1254
- // spot
1255
- //
1256
- // {
1257
- // "message":"OK",
1258
- // "code":1000,
1259
- // "trace":"6aa5b923-2f57-46e3-876d-feca190e0b82",
1260
- // "data":{
1261
- // "tickers":[
1262
- // {
1263
- // "symbol":"ETH_BTC",
1264
- // "last_price":"0.036037",
1265
- // "quote_volume_24h":"4380.6660000000",
1266
- // "base_volume_24h":"159.3582006712",
1267
- // "high_24h":"0.036972",
1268
- // "low_24h":"0.035524",
1269
- // "open_24h":"0.036561",
1270
- // "close_24h":"0.036037",
1271
- // "best_ask":"0.036077",
1272
- // "best_ask_size":"9.9500",
1273
- // "best_bid":"0.035983",
1274
- // "best_bid_size":"4.2792",
1275
- // "fluctuation":"-0.0143",
1276
- // "url":"https://www.bitmart.com/trade?symbol=ETH_BTC"
1277
- // }
1278
- // ]
1279
- // }
1280
- // }
1281
- //
1282
- // swap
1283
- //
1284
- // {
1285
- // "message":"OK",
1286
- // "code":1000,
1287
- // "trace":"4a0ebceb-d3f7-45a3-8feb-f61e230e24cd",
1288
- // "data":{
1289
- // "tickers":[
1290
- // {
1291
- // "contract_symbol":"DOGEUSDT",
1292
- // "last_price":"0.130180",
1293
- // "index_price":"0.13028635",
1294
- // "last_funding_rate":"0.00002025",
1295
- // "price_change_percent_24h":"-2.326",
1296
- // "volume_24h":"116789313.01797258",
1297
- // "url":"https://futures.bitmart.com/en?symbol=DOGEUSDT",
1298
- // "high_price":"0.134520",
1299
- // "low_price":"0.128570",
1300
- // "legal_coin_price":"0.13017401"
1301
- // }
1302
- // ]
1303
- // }
1304
- // }
1305
- //
1306
- const data = this.safeValue(response, 'data', {});
1307
- const tickers = this.safeValue(data, 'tickers', []);
1308
1341
  // fails in naming for contract tickers 'contract_symbol'
1309
1342
  let tickersById = undefined;
1343
+ let tickers = [];
1344
+ let ticker = {};
1310
1345
  if (market['spot']) {
1311
- tickersById = this.indexBy(tickers, 'symbol');
1346
+ ticker = this.safeDict(response, 'data', {});
1312
1347
  }
1313
- else if (market['swap']) {
1348
+ else {
1349
+ const data = this.safeDict(response, 'data', {});
1350
+ tickers = this.safeList(data, 'tickers', []);
1314
1351
  tickersById = this.indexBy(tickers, 'contract_symbol');
1352
+ ticker = this.safeDict(tickersById, market['id']);
1315
1353
  }
1316
- const ticker = this.safeDict(tickersById, market['id']);
1317
1354
  return this.parseTicker(ticker, market);
1318
1355
  }
1319
1356
  async fetchTickers(symbols = undefined, params = {}) {
@@ -1321,7 +1358,7 @@ class bitmart extends bitmart$1 {
1321
1358
  * @method
1322
1359
  * @name bitmart#fetchTickers
1323
1360
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1324
- * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-all-pairs-v2
1361
+ * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-all-pairs-v3
1325
1362
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1326
1363
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1327
1364
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -1337,19 +1374,78 @@ class bitmart extends bitmart$1 {
1337
1374
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1338
1375
  let response = undefined;
1339
1376
  if (type === 'spot') {
1340
- response = await this.publicGetSpotV2Ticker(params);
1377
+ response = await this.publicGetSpotQuotationV3Tickers(params);
1378
+ //
1379
+ // {
1380
+ // "code": 1000,
1381
+ // "trace": "17c5e5d9ac49f9b71efca2bed55f1a.105.171225637482393",
1382
+ // "message": "success",
1383
+ // "data": [
1384
+ // [
1385
+ // "AFIN_USDT",
1386
+ // "0.001047",
1387
+ // "11110",
1388
+ // "11.632170",
1389
+ // "0.001048",
1390
+ // "0.001048",
1391
+ // "0.001047",
1392
+ // "-0.00095",
1393
+ // "0.001029",
1394
+ // "5555",
1395
+ // "0.001041",
1396
+ // "5297",
1397
+ // "1717122550482"
1398
+ // ],
1399
+ // ]
1400
+ // }
1401
+ //
1341
1402
  }
1342
1403
  else if (type === 'swap') {
1343
1404
  response = await this.publicGetContractV1Tickers(params);
1405
+ //
1406
+ // {
1407
+ // "message": "OK",
1408
+ // "code": 1000,
1409
+ // "trace": "c1dec681c24ea5d.105.171712565",
1410
+ // "data": {
1411
+ // "tickers": [
1412
+ // {
1413
+ // "contract_symbol": "SNTUSDT",
1414
+ // "last_price": "0.0366600",
1415
+ // "index_price": "0.03587373",
1416
+ // "last_funding_rate": "0.00005000",
1417
+ // "price_change_percent_24h": "-2.629",
1418
+ // "volume_24h": "10102540.19909109848",
1419
+ // "url": "https://futures.bitmart.com/en?symbol=SNTUSDT",
1420
+ // "high_price": "0.0405600",
1421
+ // "low_price": "0.0355000",
1422
+ // "legal_coin_price": "0.03666697"
1423
+ // },
1424
+ // ]
1425
+ // }
1426
+ // }
1427
+ //
1344
1428
  }
1345
1429
  else {
1346
1430
  throw new errors.NotSupported(this.id + ' fetchTickers() does not support ' + type + ' markets, only spot and swap markets are accepted');
1347
1431
  }
1348
- const data = this.safeValue(response, 'data', {});
1349
- const tickers = this.safeValue(data, 'tickers', []);
1432
+ let tickers = [];
1433
+ if (type === 'spot') {
1434
+ tickers = this.safeList(response, 'data', []);
1435
+ }
1436
+ else {
1437
+ const data = this.safeDict(response, 'data', {});
1438
+ tickers = this.safeList(data, 'tickers', []);
1439
+ }
1350
1440
  const result = {};
1351
1441
  for (let i = 0; i < tickers.length; i++) {
1352
- const ticker = this.parseTicker(tickers[i]);
1442
+ let ticker = {};
1443
+ if (type === 'spot') {
1444
+ ticker = this.parseTicker({ 'result': tickers[i] });
1445
+ }
1446
+ else {
1447
+ ticker = this.parseTicker(tickers[i]);
1448
+ }
1353
1449
  const symbol = ticker['symbol'];
1354
1450
  result[symbol] = ticker;
1355
1451
  }
@@ -1443,7 +1443,17 @@ class bitstamp extends bitstamp$1 {
1443
1443
  const request = {
1444
1444
  'id': id,
1445
1445
  };
1446
- return await this.privatePostCancelOrder(this.extend(request, params));
1446
+ const response = await this.privatePostCancelOrder(this.extend(request, params));
1447
+ //
1448
+ // {
1449
+ // "id": 1453282316578816,
1450
+ // "amount": "0.02035278",
1451
+ // "price": "2100.45",
1452
+ // "type": 0,
1453
+ // "market": "BTC/USD"
1454
+ // }
1455
+ //
1456
+ return this.parseOrder(response);
1447
1457
  }
1448
1458
  async cancelAllOrders(symbol = undefined, params = {}) {
1449
1459
  /**
@@ -1468,7 +1478,23 @@ class bitstamp extends bitstamp$1 {
1468
1478
  else {
1469
1479
  response = await this.privatePostCancelAllOrders(this.extend(request, params));
1470
1480
  }
1471
- return response;
1481
+ //
1482
+ // {
1483
+ // "canceled": [
1484
+ // {
1485
+ // "id": 1453282316578816,
1486
+ // "amount": "0.02035278",
1487
+ // "price": "2100.45",
1488
+ // "type": 0,
1489
+ // "currency_pair": "BTC/USD",
1490
+ // "market": "BTC/USD"
1491
+ // }
1492
+ // ],
1493
+ // "success": true
1494
+ // }
1495
+ //
1496
+ const canceled = this.safeList(response, 'canceled');
1497
+ return this.parseOrders(canceled);
1472
1498
  }
1473
1499
  parseOrderStatus(status) {
1474
1500
  const statuses = {
@@ -1845,6 +1871,16 @@ class bitstamp extends bitstamp$1 {
1845
1871
  // "id": "2814205012"
1846
1872
  // }
1847
1873
  //
1874
+ // cancelOrder
1875
+ //
1876
+ // {
1877
+ // "id": 1453282316578816,
1878
+ // "amount": "0.02035278",
1879
+ // "price": "2100.45",
1880
+ // "type": 0,
1881
+ // "market": "BTC/USD"
1882
+ // }
1883
+ //
1848
1884
  const id = this.safeString(order, 'id');
1849
1885
  const clientOrderId = this.safeString(order, 'client_order_id');
1850
1886
  let side = this.safeString(order, 'type');
@@ -613,17 +613,17 @@ class blockchaincom extends blockchaincom$1 {
613
613
  'orderId': id,
614
614
  };
615
615
  const response = await this.privateDeleteOrdersOrderId(this.extend(request, params));
616
- return {
616
+ return this.safeOrder({
617
617
  'id': id,
618
618
  'info': response,
619
- };
619
+ });
620
620
  }
621
621
  async cancelAllOrders(symbol = undefined, params = {}) {
622
622
  /**
623
623
  * @method
624
624
  * @name blockchaincom#cancelAllOrders
625
625
  * @description cancel all open orders
626
- * @see https://api.blockchain.com/v3/#/trading/deleteAllOrders
626
+ * @see https://api.blockchain.com/v3/#deleteallorders
627
627
  * @param {string} symbol unified market symbol of the market to cancel orders in, all markets are used if undefined, default is undefined
628
628
  * @param {object} [params] extra parameters specific to the exchange API endpoint
629
629
  * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -639,10 +639,14 @@ class blockchaincom extends blockchaincom$1 {
639
639
  request['symbol'] = marketId;
640
640
  }
641
641
  const response = await this.privateDeleteOrders(this.extend(request, params));
642
- return {
643
- 'symbol': symbol,
644
- 'info': response,
645
- };
642
+ //
643
+ // {}
644
+ //
645
+ return [
646
+ this.safeOrder({
647
+ 'info': response,
648
+ }),
649
+ ];
646
650
  }
647
651
  async fetchTradingFees(params = {}) {
648
652
  /**
@@ -5786,7 +5786,7 @@ class coinex extends coinex$1 {
5786
5786
  preparedString += nonce + this.secret;
5787
5787
  const signature = this.hash(this.encode(preparedString), sha256.sha256);
5788
5788
  headers = {
5789
- 'Content-Type': 'application/json; charset=utf-8',
5789
+ 'Content-Type': 'application/json',
5790
5790
  'Accept': 'application/json',
5791
5791
  'X-COINEX-KEY': this.apiKey,
5792
5792
  'X-COINEX-SIGN': signature,
@@ -1455,7 +1455,26 @@ class coinlist extends coinlist$1 {
1455
1455
  await this.loadMarkets();
1456
1456
  params = ids;
1457
1457
  const response = await this.privateDeleteV1OrdersBulk(params);
1458
- return response;
1458
+ //
1459
+ // {
1460
+ // "message": "Cancel order requests received.",
1461
+ // "order_ids": [
1462
+ // "ff132955-43bc-4fe5-9d9c-5ba226cc89a0"
1463
+ // ],
1464
+ // "timestamp": "2024-06-01T02:32:30.305Z"
1465
+ // }
1466
+ //
1467
+ const orderIds = this.safeList(response, 'order_ids', []);
1468
+ const orders = [];
1469
+ const datetime = this.safeString(response, 'timestamp');
1470
+ for (let i = 0; i < orderIds.length; i++) {
1471
+ orders.push(this.safeOrder({
1472
+ 'info': orderIds[i],
1473
+ 'id': orderIds[i],
1474
+ 'lastUpdateTimestamp': this.parse8601(datetime),
1475
+ }));
1476
+ }
1477
+ return orders;
1459
1478
  }
1460
1479
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1461
1480
  /**
@@ -926,6 +926,13 @@ class coinmate extends coinmate$1 {
926
926
  // "trailing": false,
927
927
  // }
928
928
  //
929
+ // cancelOrder
930
+ //
931
+ // {
932
+ // "success": true,
933
+ // "remainingAmount": 0.1
934
+ // }
935
+ //
929
936
  const id = this.safeString(order, 'id');
930
937
  const timestamp = this.safeInteger(order, 'timestamp');
931
938
  const side = this.safeStringLower(order, 'type');
@@ -1045,9 +1052,18 @@ class coinmate extends coinmate$1 {
1045
1052
  // {"error":false,"errorMessage":null,"data":{"success":true,"remainingAmount":0.01}}
1046
1053
  const request = { 'orderId': id };
1047
1054
  const response = await this.privatePostCancelOrderWithInfo(this.extend(request, params));
1048
- return {
1049
- 'info': response,
1050
- };
1055
+ //
1056
+ // {
1057
+ // "error": false,
1058
+ // "errorMessage": null,
1059
+ // "data": {
1060
+ // "success": true,
1061
+ // "remainingAmount": 0.1
1062
+ // }
1063
+ // }
1064
+ //
1065
+ const data = this.safeDict(response, 'data');
1066
+ return this.parseOrder(data);
1051
1067
  }
1052
1068
  nonce() {
1053
1069
  return this.milliseconds();
@@ -1061,7 +1061,7 @@ class coinone extends coinone$1 {
1061
1061
  // "errorCode": "0"
1062
1062
  // }
1063
1063
  //
1064
- return response;
1064
+ return this.safeOrder(response);
1065
1065
  }
1066
1066
  async fetchDepositAddresses(codes = undefined, params = {}) {
1067
1067
  /**
@@ -533,11 +533,22 @@ class coinspot extends coinspot$1 {
533
533
  throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a side parameter, "buy" or "sell"');
534
534
  }
535
535
  params = this.omit(params, 'side');
536
- const method = 'privatePostMy' + this.capitalize(side) + 'Cancel';
537
536
  const request = {
538
537
  'id': id,
539
538
  };
540
- return await this[method](this.extend(request, params));
539
+ let response = undefined;
540
+ if (side === 'buy') {
541
+ response = await this.privatePostMyBuyCancel(this.extend(request, params));
542
+ }
543
+ else {
544
+ response = await this.privatePostMySellCancel(this.extend(request, params));
545
+ }
546
+ //
547
+ // status - ok, error
548
+ //
549
+ return this.safeOrder({
550
+ 'info': response,
551
+ });
541
552
  }
542
553
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
543
554
  const url = this.urls['api'][api] + '/' + path;