ccxt 4.2.45 → 4.2.47

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 (90) hide show
  1. package/CHANGELOG.md +5405 -8414
  2. package/README.md +4 -4
  3. package/change.sh +5 -3
  4. package/dist/ccxt.browser.js +824 -64
  5. package/dist/ccxt.browser.min.js +7 -7
  6. package/dist/cjs/ccxt.js +1 -1
  7. package/dist/cjs/src/base/ws/Cache.js +13 -5
  8. package/dist/cjs/src/base/ws/OrderBook.js +2 -2
  9. package/dist/cjs/src/binance.js +34 -12
  10. package/dist/cjs/src/bitfinex2.js +1 -0
  11. package/dist/cjs/src/bithumb.js +5 -0
  12. package/dist/cjs/src/btcturk.js +11 -0
  13. package/dist/cjs/src/bybit.js +185 -2
  14. package/dist/cjs/src/coinbase.js +9 -5
  15. package/dist/cjs/src/coincheck.js +11 -0
  16. package/dist/cjs/src/coinmate.js +114 -1
  17. package/dist/cjs/src/coinsph.js +32 -1
  18. package/dist/cjs/src/coinspot.js +7 -0
  19. package/dist/cjs/src/cryptocom.js +2 -2
  20. package/dist/cjs/src/currencycom.js +22 -0
  21. package/dist/cjs/src/deribit.js +34 -1
  22. package/dist/cjs/src/exmo.js +22 -0
  23. package/dist/cjs/src/gemini.js +15 -0
  24. package/dist/cjs/src/hitbtc.js +2 -0
  25. package/dist/cjs/src/hollaex.js +27 -1
  26. package/dist/cjs/src/idex.js +60 -1
  27. package/dist/cjs/src/indodax.js +106 -1
  28. package/dist/cjs/src/latoken.js +3 -0
  29. package/dist/cjs/src/mercado.js +3 -0
  30. package/dist/cjs/src/oceanex.js +3 -0
  31. package/dist/cjs/src/okx.js +1 -0
  32. package/dist/cjs/src/pro/bitget.js +12 -8
  33. package/dist/cjs/src/pro/bitmart.js +11 -11
  34. package/dist/cjs/src/pro/bitmex.js +4 -4
  35. package/dist/cjs/src/pro/cex.js +2 -2
  36. package/dist/cjs/src/pro/gemini.js +4 -3
  37. package/dist/cjs/src/timex.js +65 -0
  38. package/js/ccxt.d.ts +1 -1
  39. package/js/ccxt.js +1 -1
  40. package/js/src/abstract/bequant.d.ts +2 -0
  41. package/js/src/abstract/bitcoincom.d.ts +2 -0
  42. package/js/src/abstract/bithumb.d.ts +5 -0
  43. package/js/src/abstract/coinmate.d.ts +12 -0
  44. package/js/src/abstract/fmfwio.d.ts +2 -0
  45. package/js/src/abstract/hitbtc.d.ts +2 -0
  46. package/js/src/abstract/hitbtc3.d.ts +2 -0
  47. package/js/src/abstract/hollaex.d.ts +3 -0
  48. package/js/src/abstract/okx.d.ts +1 -0
  49. package/js/src/base/Exchange.d.ts +9 -7
  50. package/js/src/base/ws/Cache.d.ts +5 -1
  51. package/js/src/base/ws/Cache.js +13 -5
  52. package/js/src/base/ws/OrderBook.d.ts +5 -1
  53. package/js/src/base/ws/OrderBook.js +3 -3
  54. package/js/src/binance.d.ts +1 -1
  55. package/js/src/binance.js +34 -12
  56. package/js/src/bitfinex2.js +1 -0
  57. package/js/src/bithumb.js +5 -0
  58. package/js/src/btcturk.js +11 -0
  59. package/js/src/bybit.d.ts +2 -0
  60. package/js/src/bybit.js +185 -2
  61. package/js/src/coinbase.js +9 -5
  62. package/js/src/coincheck.js +11 -0
  63. package/js/src/coinmate.d.ts +3 -1
  64. package/js/src/coinmate.js +114 -1
  65. package/js/src/coinsph.js +32 -1
  66. package/js/src/coinspot.js +7 -0
  67. package/js/src/cryptocom.js +2 -2
  68. package/js/src/currencycom.js +22 -0
  69. package/js/src/deribit.js +34 -1
  70. package/js/src/exmo.js +22 -0
  71. package/js/src/gemini.js +15 -0
  72. package/js/src/hitbtc.js +2 -0
  73. package/js/src/hollaex.js +27 -1
  74. package/js/src/idex.d.ts +14 -0
  75. package/js/src/idex.js +60 -1
  76. package/js/src/indodax.d.ts +3 -0
  77. package/js/src/indodax.js +106 -1
  78. package/js/src/latoken.js +3 -0
  79. package/js/src/mercado.js +3 -0
  80. package/js/src/oceanex.js +3 -0
  81. package/js/src/okx.js +1 -0
  82. package/js/src/pro/bitget.js +12 -8
  83. package/js/src/pro/bitmart.js +11 -11
  84. package/js/src/pro/bitmex.js +4 -4
  85. package/js/src/pro/cex.js +2 -2
  86. package/js/src/pro/gemini.js +4 -3
  87. package/js/src/timex.d.ts +14 -0
  88. package/js/src/timex.js +65 -0
  89. package/package.json +1 -1
  90. package/skip-tests.json +4 -0
package/js/src/indodax.js CHANGED
@@ -49,6 +49,9 @@ export default class indodax extends Exchange {
49
49
  'fetchCrossBorrowRate': false,
50
50
  'fetchCrossBorrowRates': false,
51
51
  'fetchDeposit': false,
52
+ 'fetchDepositAddress': 'emulated',
53
+ 'fetchDepositAddresses': true,
54
+ 'fetchDepositAddressesByNetwork': false,
52
55
  'fetchDeposits': false,
53
56
  'fetchDepositsWithdrawals': true,
54
57
  'fetchFundingHistory': false,
@@ -160,7 +163,25 @@ export default class indodax extends Exchange {
160
163
  'options': {
161
164
  'recvWindow': 5 * 1000,
162
165
  'timeDifference': 0,
163
- 'adjustForTimeDifference': false, // controls the adjustment logic upon instantiation
166
+ 'adjustForTimeDifference': false,
167
+ 'networks': {
168
+ 'XLM': 'Stellar Token',
169
+ 'BSC': 'bep20',
170
+ 'TRC20': 'trc20',
171
+ 'MATIC': 'polygon',
172
+ // 'BEP2': 'bep2',
173
+ // 'ARB': 'arb',
174
+ // 'ERC20': 'erc20',
175
+ // 'KIP7': 'kip7',
176
+ // 'MAINNET': 'mainnet', // TODO: does mainnet just mean the default?
177
+ // 'OEP4': 'oep4',
178
+ // 'OP': 'op',
179
+ // 'SPL': 'spl',
180
+ // 'TRC10': 'trc10',
181
+ // 'ZRC2': 'zrc2'
182
+ // 'ETH': 'eth'
183
+ // 'BASE': 'base'
184
+ },
164
185
  },
165
186
  'commonCurrencies': {
166
187
  'STR': 'XLM',
@@ -1019,6 +1040,90 @@ export default class indodax extends Exchange {
1019
1040
  };
1020
1041
  return this.safeString(statuses, status, status);
1021
1042
  }
1043
+ async fetchDepositAddresses(codes = undefined, params = {}) {
1044
+ /**
1045
+ * @method
1046
+ * @name indodax#fetchDepositAddresses
1047
+ * @description fetch deposit addresses for multiple currencies and chain types
1048
+ * @param {string[]} [codes] list of unified currency codes, default is undefined
1049
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1050
+ * @returns {object} a list of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure}
1051
+ */
1052
+ await this.loadMarkets();
1053
+ const response = await this.privatePostGetInfo(params);
1054
+ //
1055
+ // {
1056
+ // success: '1',
1057
+ // return: {
1058
+ // server_time: '1708031570',
1059
+ // balance: {
1060
+ // idr: '29952',
1061
+ // ...
1062
+ // },
1063
+ // balance_hold: {
1064
+ // idr: '0',
1065
+ // ...
1066
+ // },
1067
+ // address: {
1068
+ // btc: '1KMntgzvU7iTSgMBWc11nVuJjAyfW3qJyk',
1069
+ // ...
1070
+ // },
1071
+ // memo_is_required: {
1072
+ // btc: { mainnet: false },
1073
+ // ...
1074
+ // },
1075
+ // network: {
1076
+ // btc: 'mainnet',
1077
+ // ...
1078
+ // },
1079
+ // user_id: '276011',
1080
+ // name: '',
1081
+ // email: 'testbitcoincoid@mailforspam.com',
1082
+ // profile_picture: null,
1083
+ // verification_status: 'unverified',
1084
+ // gauth_enable: true,
1085
+ // withdraw_status: '0'
1086
+ // }
1087
+ // }
1088
+ //
1089
+ const data = this.safeDict(response, 'return');
1090
+ const addresses = this.safeDict(data, 'address', {});
1091
+ const networks = this.safeDict(data, 'network', {});
1092
+ const addressKeys = Object.keys(addresses);
1093
+ const result = {
1094
+ 'info': data,
1095
+ };
1096
+ for (let i = 0; i < addressKeys.length; i++) {
1097
+ const marketId = addressKeys[i];
1098
+ const code = this.safeCurrencyCode(marketId);
1099
+ const address = this.safeString(addresses, marketId);
1100
+ if ((address !== undefined) && ((codes === undefined) || (this.inArray(code, codes)))) {
1101
+ this.checkAddress(address);
1102
+ let network = undefined;
1103
+ if (marketId in networks) {
1104
+ const networkId = this.safeString(networks, marketId);
1105
+ if (networkId.indexOf(',') >= 0) {
1106
+ network = [];
1107
+ const networkIds = networkId.split(',');
1108
+ for (let j = 0; j < networkIds.length; j++) {
1109
+ network.push(this.networkIdToCode(networkIds[j]).toUpperCase());
1110
+ }
1111
+ }
1112
+ else {
1113
+ network = this.networkIdToCode(networkId).toUpperCase();
1114
+ }
1115
+ }
1116
+ result[code] = {
1117
+ 'info': {},
1118
+ 'currency': code,
1119
+ 'address': address,
1120
+ 'network': network,
1121
+ 'tag': undefined,
1122
+ };
1123
+ }
1124
+ }
1125
+ return result;
1126
+ }
1022
1127
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1023
1128
  let url = this.urls['api'][api];
1024
1129
  if (api === 'public') {
package/js/src/latoken.js CHANGED
@@ -44,6 +44,9 @@ export default class latoken extends Exchange {
44
44
  'fetchCrossBorrowRate': false,
45
45
  'fetchCrossBorrowRates': false,
46
46
  'fetchCurrencies': true,
47
+ 'fetchDepositAddress': false,
48
+ 'fetchDepositAddresses': false,
49
+ 'fetchDepositAddressesByNetwork': false,
47
50
  'fetchDepositsWithdrawals': true,
48
51
  'fetchDepositWithdrawFees': false,
49
52
  'fetchIsolatedBorrowRate': false,
package/js/src/mercado.js CHANGED
@@ -43,6 +43,9 @@ export default class mercado extends Exchange {
43
43
  'fetchBorrowRateHistory': false,
44
44
  'fetchCrossBorrowRate': false,
45
45
  'fetchCrossBorrowRates': false,
46
+ 'fetchDepositAddress': false,
47
+ 'fetchDepositAddresses': false,
48
+ 'fetchDepositAddressesByNetwork': false,
46
49
  'fetchFundingHistory': false,
47
50
  'fetchFundingRate': false,
48
51
  'fetchFundingRateHistory': false,
package/js/src/oceanex.js CHANGED
@@ -50,6 +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
56
  'fetchIsolatedBorrowRate': false,
54
57
  'fetchIsolatedBorrowRates': false,
55
58
  'fetchMarkets': true,
package/js/src/okx.js CHANGED
@@ -447,6 +447,7 @@ export default class okx extends Exchange {
447
447
  'account/quick-margin-borrow-repay': 4,
448
448
  'account/borrow-repay': 5 / 3,
449
449
  'account/simulated_margin': 10,
450
+ 'account/position-builder': 10,
450
451
  'account/set-riskOffset-type': 2,
451
452
  'account/activate-option': 4,
452
453
  'account/set-auto-loan': 4,
@@ -521,13 +521,15 @@ export default class bitget extends bitgetRest {
521
521
  const rawOrderBook = this.safeValue(data, 0);
522
522
  const timestamp = this.safeInteger(rawOrderBook, 'ts');
523
523
  const incrementalBook = channel === 'books';
524
- let storedOrderBook = undefined;
525
524
  if (incrementalBook) {
526
- storedOrderBook = this.safeValue(this.orderbooks, symbol);
527
- if (storedOrderBook === undefined) {
528
- storedOrderBook = this.countedOrderBook({});
529
- storedOrderBook['symbol'] = symbol;
525
+ // storedOrderBook = this.safeValue (this.orderbooks, symbol);
526
+ if (!(symbol in this.orderbooks)) {
527
+ // const ob = this.orderBook ({});
528
+ const ob = this.countedOrderBook({});
529
+ ob['symbol'] = symbol;
530
+ this.orderbooks[symbol] = ob;
530
531
  }
532
+ const storedOrderBook = this.orderbooks[symbol];
531
533
  const asks = this.safeValue(rawOrderBook, 'asks', []);
532
534
  const bids = this.safeValue(rawOrderBook, 'bids', []);
533
535
  this.handleDeltas(storedOrderBook['asks'], asks);
@@ -562,10 +564,12 @@ export default class bitget extends bitgetRest {
562
564
  }
563
565
  }
564
566
  else {
565
- storedOrderBook = this.parseOrderBook(rawOrderBook, symbol, timestamp);
567
+ const orderbook = this.orderBook({});
568
+ const parsedOrderbook = this.parseOrderBook(rawOrderBook, symbol, timestamp);
569
+ orderbook.reset(parsedOrderbook);
570
+ this.orderbooks[symbol] = orderbook;
566
571
  }
567
- this.orderbooks[symbol] = storedOrderBook;
568
- client.resolve(storedOrderBook, messageHash);
572
+ client.resolve(this.orderbooks[symbol], messageHash);
569
573
  }
570
574
  handleDelta(bookside, delta) {
571
575
  const bidAsk = this.parseBidAsk(delta, 0, 1);
@@ -1320,13 +1320,13 @@ export default class bitmart extends bitmartRest {
1320
1320
  const update = datas[i];
1321
1321
  const marketId = this.safeString(update, 'symbol');
1322
1322
  const symbol = this.safeSymbol(marketId);
1323
- let orderbook = this.safeDict(this.orderbooks, symbol);
1324
- if (orderbook === undefined) {
1325
- orderbook = this.orderBook({}, limit);
1326
- orderbook['symbol'] = symbol;
1327
- this.orderbooks[symbol] = orderbook;
1323
+ if (!(symbol in this.orderbooks)) {
1324
+ const ob = this.orderBook({}, limit);
1325
+ ob['symbol'] = symbol;
1326
+ this.orderbooks[symbol] = ob;
1328
1327
  }
1329
- const type = this.safeValue(update, 'type');
1328
+ const orderbook = this.orderbooks[symbol];
1329
+ const type = this.safeString(update, 'type');
1330
1330
  if ((type === 'snapshot') || (!(channelName.indexOf('increase') >= 0))) {
1331
1331
  orderbook.reset({});
1332
1332
  }
@@ -1350,12 +1350,12 @@ export default class bitmart extends bitmartRest {
1350
1350
  const depths = data['depths'];
1351
1351
  const marketId = this.safeString(data, 'symbol');
1352
1352
  const symbol = this.safeSymbol(marketId);
1353
- let orderbook = this.safeDict(this.orderbooks, symbol);
1354
- if (orderbook === undefined) {
1355
- orderbook = this.orderBook({}, limit);
1356
- orderbook['symbol'] = symbol;
1357
- this.orderbooks[symbol] = orderbook;
1353
+ if (!(symbol in this.orderbooks)) {
1354
+ const ob = this.orderBook({}, limit);
1355
+ ob['symbol'] = symbol;
1356
+ this.orderbooks[symbol] = ob;
1358
1357
  }
1358
+ const orderbook = this.orderbooks[symbol];
1359
1359
  const way = this.safeNumber(data, 'way');
1360
1360
  const side = (way === 1) ? 'bids' : 'asks';
1361
1361
  if (way === 1) {
@@ -351,11 +351,11 @@ export default class bitmex extends bitmexRest {
351
351
  const market = this.safeMarket(marketId);
352
352
  const symbol = market['symbol'];
353
353
  const messageHash = table + ':' + marketId;
354
- let ticker = this.safeDict(this.tickers, symbol, {});
354
+ const ticker = this.safeDict(this.tickers, symbol, {});
355
355
  const info = this.safeDict(ticker, 'info', {});
356
- ticker = this.parseTicker(this.extend(info, update), market);
357
- tickers[symbol] = ticker;
358
- this.tickers[symbol] = ticker;
356
+ const parsedTicker = this.parseTicker(this.extend(info, update), market);
357
+ tickers[symbol] = parsedTicker;
358
+ this.tickers[symbol] = parsedTicker;
359
359
  client.resolve(ticker, messageHash);
360
360
  }
361
361
  client.resolve(tickers, 'instrument');
package/js/src/pro/cex.js CHANGED
@@ -174,7 +174,7 @@ export default class cex extends cexRest {
174
174
  stored.append(parsed);
175
175
  }
176
176
  const messageHash = 'trades';
177
- this.trades = stored;
177
+ this.trades = stored; // trades don't have symbol
178
178
  client.resolve(this.trades, messageHash);
179
179
  }
180
180
  parseWsOldTrade(trade, market = undefined) {
@@ -218,7 +218,7 @@ export default class cex extends cexRest {
218
218
  // }
219
219
  //
220
220
  const data = this.safeValue(message, 'data', []);
221
- const stored = this.trades;
221
+ const stored = this.trades; // to do fix this, this.trades is not meant to be used like this
222
222
  for (let i = 0; i < data.length; i++) {
223
223
  const rawTrade = data[i];
224
224
  const parsed = this.parseWsOldTrade(rawTrade);
@@ -463,10 +463,11 @@ export default class gemini extends geminiRest {
463
463
  const market = this.safeMarket(marketId.toLowerCase());
464
464
  const symbol = market['symbol'];
465
465
  const messageHash = 'orderbook:' + symbol;
466
- let orderbook = this.safeDict(this.orderbooks, symbol);
467
- if (orderbook === undefined) {
468
- orderbook = this.orderBook();
466
+ if (!(symbol in this.orderbooks)) {
467
+ const ob = this.orderBook();
468
+ this.orderbooks[symbol] = ob;
469
469
  }
470
+ const orderbook = this.orderbooks[symbol];
470
471
  const bids = orderbook['bids'];
471
472
  const asks = orderbook['asks'];
472
473
  for (let i = 0; i < rawOrderBookChanges.length; i++) {
package/js/src/timex.d.ts CHANGED
@@ -67,6 +67,20 @@ export default class timex extends Exchange {
67
67
  parseTrade(trade: any, market?: Market): Trade;
68
68
  parseOHLCV(ohlcv: any, market?: Market): OHLCV;
69
69
  parseOrder(order: any, market?: Market): Order;
70
+ fetchDepositAddress(code: string, params?: {}): Promise<{
71
+ info: any;
72
+ currency: string;
73
+ address: string;
74
+ tag: any;
75
+ network: any;
76
+ }>;
77
+ parseDepositAddress(depositAddress: any, currency?: Currency): {
78
+ info: any;
79
+ currency: string;
80
+ address: string;
81
+ tag: any;
82
+ network: any;
83
+ };
70
84
  sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
71
85
  url: string;
72
86
  method: string;
package/js/src/timex.js CHANGED
@@ -44,6 +44,9 @@ export default class timex extends Exchange {
44
44
  'fetchCrossBorrowRates': false,
45
45
  'fetchCurrencies': true,
46
46
  'fetchDeposit': false,
47
+ 'fetchDepositAddress': true,
48
+ 'fetchDepositAddresses': false,
49
+ 'fetchDepositAddressesByNetwork': false,
47
50
  'fetchDeposits': true,
48
51
  'fetchFundingHistory': false,
49
52
  'fetchFundingRate': false,
@@ -1524,7 +1527,69 @@ export default class timex extends Exchange {
1524
1527
  'trades': rawTrades,
1525
1528
  }, market);
1526
1529
  }
1530
+ async fetchDepositAddress(code, params = {}) {
1531
+ /**
1532
+ * @method
1533
+ * @name timex#fetchDepositAddress
1534
+ * @description fetch the deposit address for a currency associated with this account, does not accept params["network"]
1535
+ * @param {string} code unified currency code
1536
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1537
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1538
+ */
1539
+ await this.loadMarkets();
1540
+ const currency = this.currency(code);
1541
+ const request = {
1542
+ 'symbol': currency['code'],
1543
+ };
1544
+ const response = await this.currenciesGetSSymbol(this.extend(request, params));
1545
+ //
1546
+ // {
1547
+ // id: '1',
1548
+ // currency: {
1549
+ // symbol: 'BTC',
1550
+ // name: 'Bitcoin',
1551
+ // address: '0x8370fbc6ddec1e18b4e41e72ed943e238458487c',
1552
+ // decimals: '8',
1553
+ // tradeDecimals: '20',
1554
+ // fiatSymbol: 'BTC',
1555
+ // depositEnabled: true,
1556
+ // withdrawalEnabled: true,
1557
+ // transferEnabled: true,
1558
+ // active: true
1559
+ // }
1560
+ // }
1561
+ //
1562
+ const data = this.safeDict(response, 'currency', {});
1563
+ return this.parseDepositAddress(data, currency);
1564
+ }
1565
+ parseDepositAddress(depositAddress, currency = undefined) {
1566
+ //
1567
+ // {
1568
+ // symbol: 'BTC',
1569
+ // name: 'Bitcoin',
1570
+ // address: '0x8370fbc6ddec1e18b4e41e72ed943e238458487c',
1571
+ // decimals: '8',
1572
+ // tradeDecimals: '20',
1573
+ // fiatSymbol: 'BTC',
1574
+ // depositEnabled: true,
1575
+ // withdrawalEnabled: true,
1576
+ // transferEnabled: true,
1577
+ // active: true
1578
+ // }
1579
+ //
1580
+ const currencyId = this.safeString(depositAddress, 'symbol');
1581
+ return {
1582
+ 'info': depositAddress,
1583
+ 'currency': this.safeCurrencyCode(currencyId, currency),
1584
+ 'address': this.safeString(depositAddress, 'address'),
1585
+ 'tag': undefined,
1586
+ 'network': undefined,
1587
+ };
1588
+ }
1527
1589
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1590
+ const paramsToExtract = this.extractParams(path);
1591
+ path = this.implodeParams(path, params);
1592
+ params = this.omit(params, paramsToExtract);
1528
1593
  let url = this.urls['api']['rest'] + '/' + api + '/' + path;
1529
1594
  if (Object.keys(params).length) {
1530
1595
  url += '?' + this.urlencodeWithArrayRepeat(params);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.2.45",
3
+ "version": "4.2.47",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.js",
6
6
  "type": "module",
package/skip-tests.json CHANGED
@@ -356,6 +356,8 @@
356
356
  }
357
357
  },
358
358
  "onetrading": {
359
+ "skip": true,
360
+ "until": "2024-02-28",
359
361
  "skipWs": true,
360
362
  "skipMethods": {
361
363
  "fetchOrderBook": "some bid might be lower than next bid",
@@ -707,6 +709,8 @@
707
709
  }
708
710
  },
709
711
  "coinsph": {
712
+ "skip": true,
713
+ "until": "2024-02-20",
710
714
  "skipMethods": {
711
715
  "loadMarkets": {
712
716
  "taker":"messed",