Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Changelog

## v4.9.11 - 2025-10-15

### Fixed

**Exchange Performance Optimizations**: Improved symbol handling and API response processing

- **Hamtapay Exchange**: Optimized ticker parsing loop to cache base symbol array lookups
- Refactored nested loops to store `Object.keys(corresponding_data)` in `baseSymbols` variable
- Eliminated redundant `Object.keys()` calls inside the loop, improving performance
- Fixed in ts/src/hamtapay.ts:222-223

- **Kifpoolme Exchange**: Fixed array membership check and removed unused params
- Changed `indexOf() === -1` to more idiomatic `in` operator for base symbol checking
- Removed unused `params` argument in `publicGetApiSpotPrice` call
- Fixed in ts/src/kifpoolme.ts:245, ts/src/kifpoolme.ts:255

- **Tetherland Exchange**: Replaced deprecated `asFloat` with native `parseFloat`
- Migrated from custom `asFloat` function to JavaScript's built-in `parseFloat`
- Removed unnecessary import of `asFloat` from base functions
- Fixed in ts/src/tetherland.ts:338

- **Twox Exchange**: Fixed ticker result initialization type
- Changed ticker result from array (`[]`) to object (`{}`) for proper data structure
- Fixed in ts/src/twox.ts:249

## v4.9.10 - 2025-10-13

### Added
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,20 +243,20 @@ console.log(version, Object.keys(exchanges));
All-in-one browser bundle (dependencies included), served from a CDN of your choice:

<<<<<<< HEAD
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.10/dist/ccxt.browser.min.js
* unpkg: https://unpkg.com/ccxt@4.9.10/dist/ccxt.browser.min.js
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.11/dist/ccxt.browser.min.js
* unpkg: https://unpkg.com/ccxt@4.9.11/dist/ccxt.browser.min.js
=======
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.10/dist/ccxt.browser.min.js
* unpkg: https://unpkg.com/ccxt@4.9.10/dist/ccxt.browser.min.js
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.9.11/dist/ccxt.browser.min.js
* unpkg: https://unpkg.com/ccxt@4.9.11/dist/ccxt.browser.min.js
>>>>>>> master

CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.

```HTML
<<<<<<< HEAD
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.10/dist/ccxt.browser.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.11/dist/ccxt.browser.min.js"></script>
=======
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.10/dist/ccxt.browser.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.9.11/dist/ccxt.browser.min.js"></script>
>>>>>>> master
console.log (ccxt.exchanges) // print all available exchanges
```
Expand Down
2 changes: 1 addition & 1 deletion cs/ccxt/base/Exchange.MetaData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
// file updated automatically by vss and export-exchanges
public partial class Exchange
{
<<<<<<< HEAD

Check failure on line 6 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 6 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 6 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 6 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered
public static string ccxtVersion = "4.9.10";
public static string ccxtVersion = "4.9.11";
=======

Check failure on line 8 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 8 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 8 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered
public static string ccxtVersion = "4.6.2";
>>>>>>> master

Check failure on line 10 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 10 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

Check failure on line 10 in cs/ccxt/base/Exchange.MetaData.cs

View workflow job for this annotation

GitHub Actions / build

Merge conflict marker encountered

public static List<string> exchanges = new List<string> { "abantether", "afratether", "alpaca", "apex", "arzinja", "arzplus", "ascendex", "bequant", "bigone", "binance", "binancecoinm", "binanceus", "binanceusdm", "bingx", "bit24", "bit2c", "bitbank", "bitbarg", "bitbns", "bitfinex", "bitflyer", "bitget", "bithumb", "bitimen", "bitir", "bitmart", "bitmex", "bitopro", "bitpin", "bitrue", "bitso", "bitstamp", "bitteam", "bittrade", "bitunix", "bitvavo", "blockchaincom", "blofin", "btcalpha", "btcbox", "btcmarkets", "btcturk", "bybit", "bydfi", "cafearz", "cex", "coinbase", "coinbaseadvanced", "coinbaseexchange", "coinbaseinternational", "coincatch", "coincheck", "coinex", "coinmate", "coinmetro", "coinone", "coinsph", "coinspot", "cryptocom", "cryptomus", "defx", "delta", "deribit", "derive", "digifinex", "ellipx", "eterex", "excoino", "exir", "exmo", "exnovin", "farhadexchange", "fmfwio", "foxbit", "gate", "gateio", "gemini", "hamtapay", "hashkey", "hibachi", "hitbtc", "hitobit", "hollaex", "htx", "huobi", "hyperliquid", "independentreserve", "indodax", "jibitex", "kcex", "kifpoolme", "kraken", "krakenfutures", "kucoin", "kucoinfutures", "latoken", "lbank", "luno", "mazdax", "mercado", "mexc", "modetrade", "myokx", "ndax", "nobitex", "novadax", "oceanex", "okcoin", "okexchange", "okx", "okxus", "ompfinex", "onetrading", "oxfun", "p2b", "paradex", "paymium", "phemex", "pingi", "poloniex", "pooleno", "probit", "ramzinex", "sarmayex", "sarrafex", "tabdeal", "tetherland", "timex", "tokocrypto", "toobit", "tradeogre", "twox", "ubitex", "upbit", "vertex", "wallex", "wavesexchange", "whitebit", "woo", "woofipro", "xt", "yobit", "zaif", "zonda" };

Expand Down
6 changes: 3 additions & 3 deletions cs/ccxt/ccxt.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
<PropertyGroup>
<PackageId>ccxt</PackageId>
<Authors>Carlos, Kroitor, Carlo</Authors>
<PackageVersion>4.9.10</PackageVersion>
<AssemblyVersion>4.9.10</AssemblyVersion>
<FileVersion>4.9.10</FileVersion>
<PackageVersion>4.9.11</PackageVersion>
<AssemblyVersion>4.9.11</AssemblyVersion>
<FileVersion>4.9.11</FileVersion>
<PackageReadmeFile>README.md</PackageReadmeFile>
<Description>Cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand Down
27 changes: 13 additions & 14 deletions dist/ccxt.browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class abantether extends _abstract_abantether_js__WEBPACK_IMPORTED_MODULE_0__/*
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -86,6 +85,7 @@ class abantether extends _abstract_abantether_js__WEBPACK_IMPORTED_MODULE_0__/*
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -2532,7 +2532,6 @@ class afratether extends _abstract_afratether_js__WEBPACK_IMPORTED_MODULE_0__/*
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -2588,6 +2587,7 @@ class afratether extends _abstract_afratether_js__WEBPACK_IMPORTED_MODULE_0__/*
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -185421,8 +185421,9 @@ class hamtapay extends _abstract_hamtapay_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
for (let i = 0; i < quotes.length; i++) {
const current_qoute = quotes[i];
const corresponding_data = this.safeDict(data, current_qoute, {});
for (let j = 0; j < Object.keys(corresponding_data).length; j++) {
const current_base = Object.keys(corresponding_data)[j];
const baseSymbols = Object.keys(corresponding_data);
for (let j = 0; j < baseSymbols.length; j++) {
const current_base = baseSymbols[j];
const current_ticker = corresponding_data[current_base];
current_ticker['base'] = current_base;
current_ticker['quote'] = current_qoute;
Expand Down Expand Up @@ -215591,7 +215592,7 @@ class kifpoolme extends _abstract_kifpoolme_js__WEBPACK_IMPORTED_MODULE_0__/* ["
const baseSymbols = [];
for (let i = 0; i < symbols.length; i++) {
const market = this.market(symbols[i]);
if (baseSymbols.indexOf(market['baseId']) === -1) {
if (!(market['baseId'] in baseSymbols)) {
baseSymbols.push(market['baseId']);
}
}
Expand All @@ -215601,7 +215602,7 @@ class kifpoolme extends _abstract_kifpoolme_js__WEBPACK_IMPORTED_MODULE_0__/* ["
if (symbolsParam !== undefined) {
request['symbol'] = symbolsParam;
}
const response = await this.publicGetApiSpotPrice(this.extend(request, params));
const response = await this.publicGetApiSpotPrice(this.extend(request));
const result = {};
for (let i = 0; i < response.length; i++) {
const item = response[i];
Expand Down Expand Up @@ -237240,7 +237241,6 @@ class mazdax extends _abstract_mazdax_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -237296,6 +237296,7 @@ class mazdax extends _abstract_mazdax_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -281660,7 +281661,6 @@ class pingi extends _abstract_pingi_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -281716,6 +281716,7 @@ class pingi extends _abstract_pingi_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -384970,10 +384971,8 @@ class tabdeal extends _abstract_tabdeal_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
/* harmony export */ A: () => (/* binding */ tetherland)
/* harmony export */ });
/* harmony import */ var _abstract_tetherland_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9012);
/* harmony import */ var _base_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6834);
// ---------------------------------------------------------------------------


// ---------------------------------------------------------------------------
/**
* @class tetherland
Expand Down Expand Up @@ -385299,7 +385298,7 @@ class tetherland extends _abstract_tetherland_js__WEBPACK_IMPORTED_MODULE_0__/*
const marketId = this.safeString(ticker, 'id');
const quote = this.safeString(ticker, 'quote');
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
let last = (0,_base_functions_js__WEBPACK_IMPORTED_MODULE_1__/* .asFloat */ .Pf)(this.safeString(ticker, 'price', '').replace(',', ''));
let last = parseFloat(this.safeString(ticker, 'price', '').replace(',', ''));
if (quote === 'IRT') {
last = this.safeFloat(ticker, 'toman_amount', 0);
}
Expand Down Expand Up @@ -391096,7 +391095,6 @@ class twox extends _abstract_twox_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -391152,6 +391150,7 @@ class twox extends _abstract_twox_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -391315,7 +391314,7 @@ class twox extends _abstract_twox_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
symbols = this.marketSymbols(symbols);
}
const response = await this.publicGetApiCurrencies(params);
const result = [];
const result = {};
const quotes = ['IRT', 'USDT'];
for (let i = 0; i < response.length; i++) {
const base = this.safeString(response[i], 'symbol');
Expand Down Expand Up @@ -430206,7 +430205,7 @@ SOFTWARE.

//-----------------------------------------------------------------------------
// this is updated by vss.js when building
const ccxt_version = '4.9.10';
const ccxt_version = '4.9.11';
ccxt_src_base_Exchange_js_WEBPACK_IMPORTED_MODULE_0_/* .Exchange */ .k.ccxtVersion = ccxt_version;
//-----------------------------------------------------------------------------

Expand Down
6 changes: 3 additions & 3 deletions dist/ccxt.browser.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/cjs/ccxt.js
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ var xt$1 = require('./src/pro/xt.js');

//-----------------------------------------------------------------------------
// this is updated by vss.js when building
const version = '4.9.10';
const version = '4.9.11';
Exchange["default"].ccxtVersion = version;
const exchanges = {
'abantether': abantether["default"],
Expand Down
2 changes: 1 addition & 1 deletion dist/cjs/src/abantether.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class abantether extends abantether$1["default"] {
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -80,6 +79,7 @@ class abantether extends abantether$1["default"] {
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down
2 changes: 1 addition & 1 deletion dist/cjs/src/afratether.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class afratether extends afratether$1["default"] {
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -80,6 +79,7 @@ class afratether extends afratether$1["default"] {
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down
5 changes: 3 additions & 2 deletions dist/cjs/src/hamtapay.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,9 @@ class hamtapay extends hamtapay$1["default"] {
for (let i = 0; i < quotes.length; i++) {
const current_qoute = quotes[i];
const corresponding_data = this.safeDict(data, current_qoute, {});
for (let j = 0; j < Object.keys(corresponding_data).length; j++) {
const current_base = Object.keys(corresponding_data)[j];
const baseSymbols = Object.keys(corresponding_data);
for (let j = 0; j < baseSymbols.length; j++) {
const current_base = baseSymbols[j];
const current_ticker = corresponding_data[current_base];
current_ticker['base'] = current_base;
current_ticker['quote'] = current_qoute;
Expand Down
4 changes: 2 additions & 2 deletions dist/cjs/src/kifpoolme.js
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ class kifpoolme extends kifpoolme$1["default"] {
const baseSymbols = [];
for (let i = 0; i < symbols.length; i++) {
const market = this.market(symbols[i]);
if (baseSymbols.indexOf(market['baseId']) === -1) {
if (!(market['baseId'] in baseSymbols)) {
baseSymbols.push(market['baseId']);
}
}
Expand All @@ -250,7 +250,7 @@ class kifpoolme extends kifpoolme$1["default"] {
if (symbolsParam !== undefined) {
request['symbol'] = symbolsParam;
}
const response = await this.publicGetApiSpotPrice(this.extend(request, params));
const response = await this.publicGetApiSpotPrice(this.extend(request));
const result = {};
for (let i = 0; i < response.length; i++) {
const item = response[i];
Expand Down
2 changes: 1 addition & 1 deletion dist/cjs/src/mazdax.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class mazdax extends mazdax$1["default"] {
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -80,6 +79,7 @@ class mazdax extends mazdax$1["default"] {
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down
2 changes: 1 addition & 1 deletion dist/cjs/src/pingi.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class pingi extends pingi$1["default"] {
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -80,6 +79,7 @@ class pingi extends pingi$1["default"] {
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down
6 changes: 1 addition & 5 deletions dist/cjs/src/tetherland.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@
Object.defineProperty(exports, '__esModule', { value: true });

var tetherland$1 = require('./abstract/tetherland.js');
require('./base/functions/platform.js');
var type = require('./base/functions/type.js');
require('./base/functions/encode.js');
require('./base/functions/crypto.js');

// ----------------------------------------------------------------------------
// ---------------------------------------------------------------------------
Expand Down Expand Up @@ -334,7 +330,7 @@ class tetherland extends tetherland$1["default"] {
const marketId = this.safeString(ticker, 'id');
const quote = this.safeString(ticker, 'quote');
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
let last = type.asFloat(this.safeString(ticker, 'price', '').replace(',', ''));
let last = parseFloat(this.safeString(ticker, 'price', '').replace(',', ''));
if (quote === 'IRT') {
last = this.safeFloat(ticker, 'toman_amount', 0);
}
Expand Down
4 changes: 2 additions & 2 deletions dist/cjs/src/twox.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class twox extends twox$1["default"] {
'has': {
'CORS': undefined,
'spot': false,
'otc': true,
'margin': false,
'swap': false,
'future': false,
Expand Down Expand Up @@ -80,6 +79,7 @@ class twox extends twox$1["default"] {
'fetchTradingFee': false,
'fetchTradingFees': false,
'fetchWithdrawals': false,
'otc': true,
'setLeverage': false,
'setMarginMode': false,
'transfer': false,
Expand Down Expand Up @@ -243,7 +243,7 @@ class twox extends twox$1["default"] {
symbols = this.marketSymbols(symbols);
}
const response = await this.publicGetApiCurrencies(params);
const result = [];
const result = {};
const quotes = ['IRT', 'USDT'];
for (let i = 0; i < response.length; i++) {
const base = this.safeString(response[i], 'symbol');
Expand Down
2 changes: 1 addition & 1 deletion go/v4/exchange_metadata.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package ccxt

var Version string = "4.9.10"
var Version string = "4.9.11"

var Exchanges []string = []string{ "Abantether", "Afratether", "Alpaca", "Apex", "Arzinja", "Arzplus", "Ascendex", "Bequant", "Bigone", "Binance", "Binancecoinm", "Binanceus", "Binanceusdm", "Bingx", "Bit24", "Bit2c", "Bitbank", "Bitbarg", "Bitbns", "Bitfinex", "Bitflyer", "Bitget", "Bithumb", "Bitimen", "Bitir", "Bitmart", "Bitmex", "Bitopro", "Bitpin", "Bitrue", "Bitso", "Bitstamp", "Bitteam", "Bittrade", "Bitunix", "Bitvavo", "Blockchaincom", "Blofin", "Btcalpha", "Btcbox", "Btcmarkets", "Btcturk", "Bybit", "Bydfi", "Cafearz", "Cex", "Coinbase", "Coinbaseadvanced", "Coinbaseexchange", "Coinbaseinternational", "Coincatch", "Coincheck", "Coinex", "Coinmate", "Coinmetro", "Coinone", "Coinsph", "Coinspot", "Cryptocom", "Cryptomus", "Defx", "Delta", "Deribit", "Derive", "Digifinex", "Ellipx", "Eterex", "Excoino", "Exir", "Exmo", "Exnovin", "Farhadexchange", "Fmfwio", "Foxbit", "Gate", "Gateio", "Gemini", "Hamtapay", "Hashkey", "Hibachi", "Hitbtc", "Hitobit", "Hollaex", "Htx", "Huobi", "Hyperliquid", "Independentreserve", "Indodax", "Jibitex", "Kcex", "Kifpoolme", "Kraken", "Krakenfutures", "Kucoin", "Kucoinfutures", "Latoken", "Lbank", "Luno", "Mazdax", "Mercado", "Mexc", "Modetrade", "Myokx", "Ndax", "Nobitex", "Novadax", "Oceanex", "Okcoin", "Okexchange", "Okx", "Okxus", "Ompfinex", "Onetrading", "Oxfun", "P2b", "Paradex", "Paymium", "Phemex", "Pingi", "Poloniex", "Pooleno", "Probit", "Ramzinex", "Sarmayex", "Sarrafex", "Tabdeal", "Tetherland", "Timex", "Tokocrypto", "Toobit", "Tradeogre", "Twox", "Ubitex", "Upbit", "Vertex", "Wallex", "Wavesexchange", "Whitebit", "Woo", "Woofipro", "Xt", "Yobit", "Zaif", "Zonda" }
Loading
Loading