ccxt
Version:
1,060 lines (1,057 loc) • 371 kB
JavaScript
// ----------------------------------------------------------------------------
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
// ---------------------------------------------------------------------------
import Exchange from './abstract/gate.js';
import { Precise } from './base/Precise.js';
import { TICK_SIZE } from './base/functions/number.js';
import { ExchangeError, BadRequest, ArgumentsRequired, AuthenticationError, PermissionDenied, AccountSuspended, InsufficientFunds, RateLimitExceeded, ExchangeNotAvailable, BadSymbol, InvalidOrder, OrderNotFound, NotSupported, AccountNotEnabled, OrderImmediatelyFillable } from './base/errors.js';
import { sha512 } from './static_dependencies/noble-hashes/sha512.js';
/**
* @class gate
* @augments Exchange
*/
export default class gate extends Exchange {
describe() {
return this.deepExtend(super.describe(), {
'id': 'gate',
'name': 'Gate.io',
'countries': ['KR'],
'rateLimit': 50,
'version': 'v4',
'certified': true,
'pro': true,
'urls': {
'logo': 'https://github.com/user-attachments/assets/64f988c5-07b6-4652-b5c1-679a6bf67c85',
'doc': 'https://www.gate.io/docs/developers/apiv4/en/',
'www': 'https://gate.io/',
'api': {
'public': {
'wallet': 'https://api.gateio.ws/api/v4',
'futures': 'https://api.gateio.ws/api/v4',
'margin': 'https://api.gateio.ws/api/v4',
'delivery': 'https://api.gateio.ws/api/v4',
'spot': 'https://api.gateio.ws/api/v4',
'options': 'https://api.gateio.ws/api/v4',
'sub_accounts': 'https://api.gateio.ws/api/v4',
'earn': 'https://api.gateio.ws/api/v4',
},
'private': {
'withdrawals': 'https://api.gateio.ws/api/v4',
'wallet': 'https://api.gateio.ws/api/v4',
'futures': 'https://api.gateio.ws/api/v4',
'margin': 'https://api.gateio.ws/api/v4',
'delivery': 'https://api.gateio.ws/api/v4',
'spot': 'https://api.gateio.ws/api/v4',
'options': 'https://api.gateio.ws/api/v4',
'subAccounts': 'https://api.gateio.ws/api/v4',
'unified': 'https://api.gateio.ws/api/v4',
'rebate': 'https://api.gateio.ws/api/v4',
'earn': 'https://api.gateio.ws/api/v4',
'account': 'https://api.gateio.ws/api/v4',
'loan': 'https://api.gateio.ws/api/v4',
},
},
'test': {
'public': {
'futures': 'https://fx-api-testnet.gateio.ws/api/v4',
'delivery': 'https://fx-api-testnet.gateio.ws/api/v4',
'options': 'https://fx-api-testnet.gateio.ws/api/v4',
},
'private': {
'futures': 'https://fx-api-testnet.gateio.ws/api/v4',
'delivery': 'https://fx-api-testnet.gateio.ws/api/v4',
'options': 'https://fx-api-testnet.gateio.ws/api/v4',
},
},
'referral': {
'url': 'https://www.gate.io/signup/2436035',
'discount': 0.2,
},
},
'has': {
'CORS': undefined,
'spot': true,
'margin': true,
'swap': true,
'future': true,
'option': true,
'addMargin': true,
'borrowCrossMargin': true,
'borrowIsolatedMargin': true,
'cancelAllOrders': true,
'cancelOrder': true,
'cancelOrders': true,
'cancelOrdersForSymbols': true,
'createMarketBuyOrderWithCost': true,
'createMarketOrder': true,
'createMarketOrderWithCost': false,
'createMarketSellOrderWithCost': false,
'createOrder': true,
'createOrders': true,
'createPostOnlyOrder': true,
'createReduceOnlyOrder': true,
'createStopLimitOrder': true,
'createStopLossOrder': true,
'createStopMarketOrder': false,
'createStopOrder': true,
'createTakeProfitOrder': true,
'createTriggerOrder': true,
'editOrder': true,
'fetchBalance': true,
'fetchBorrowInterest': true,
'fetchBorrowRateHistories': false,
'fetchBorrowRateHistory': false,
'fetchClosedOrders': true,
'fetchCrossBorrowRate': false,
'fetchCrossBorrowRates': false,
'fetchCurrencies': true,
'fetchDepositAddress': true,
'fetchDepositAddresses': false,
'fetchDepositAddressesByNetwork': true,
'fetchDeposits': true,
'fetchDepositWithdrawFee': 'emulated',
'fetchDepositWithdrawFees': true,
'fetchFundingHistory': true,
'fetchFundingRate': true,
'fetchFundingRateHistory': true,
'fetchFundingRates': true,
'fetchGreeks': true,
'fetchIndexOHLCV': true,
'fetchIsolatedBorrowRate': false,
'fetchIsolatedBorrowRates': false,
'fetchLedger': true,
'fetchLeverage': true,
'fetchLeverages': true,
'fetchLeverageTiers': true,
'fetchLiquidations': true,
'fetchMarginAdjustmentHistory': false,
'fetchMarginMode': false,
'fetchMarketLeverageTiers': true,
'fetchMarkets': true,
'fetchMarkOHLCV': true,
'fetchMyLiquidations': true,
'fetchMySettlementHistory': true,
'fetchMyTrades': true,
'fetchNetworkDepositAddress': true,
'fetchOHLCV': true,
'fetchOpenInterest': false,
'fetchOpenInterestHistory': true,
'fetchOpenOrders': true,
'fetchOption': true,
'fetchOptionChain': true,
'fetchOrder': true,
'fetchOrderBook': true,
'fetchPosition': true,
'fetchPositionHistory': 'emulated',
'fetchPositionMode': false,
'fetchPositions': true,
'fetchPositionsHistory': true,
'fetchPremiumIndexOHLCV': false,
'fetchSettlementHistory': true,
'fetchTicker': true,
'fetchTickers': true,
'fetchTime': true,
'fetchTrades': true,
'fetchTradingFee': true,
'fetchTradingFees': true,
'fetchTransactionFees': true,
'fetchUnderlyingAssets': true,
'fetchVolatilityHistory': false,
'fetchWithdrawals': true,
'reduceMargin': true,
'repayCrossMargin': true,
'repayIsolatedMargin': true,
'sandbox': true,
'setLeverage': true,
'setMarginMode': false,
'setPositionMode': true,
'signIn': false,
'transfer': true,
'withdraw': true,
},
'api': {
'public': {
// All public endpoints 200r/10s per endpoint
'wallet': {
'get': {
'currency_chains': 1,
},
},
'spot': {
'get': {
'currencies': 1,
'currencies/{currency}': 1,
'currency_pairs': 1,
'currency_pairs/{currency_pair}': 1,
'tickers': 1,
'order_book': 1,
'trades': 1,
'candlesticks': 1,
'time': 1,
},
},
'margin': {
'get': {
'currency_pairs': 1,
'currency_pairs/{currency_pair}': 1,
'funding_book': 1,
'cross/currencies': 1,
'cross/currencies/{currency}': 1,
'uni/currency_pairs': 1,
'uni/currency_pairs/{currency_pair}': 1,
},
},
'flash_swap': {
'get': {
'currencies': 1,
},
},
'futures': {
'get': {
'{settle}/contracts': 1,
'{settle}/contracts/{contract}': 1,
'{settle}/order_book': 1,
'{settle}/trades': 1,
'{settle}/candlesticks': 1,
'{settle}/premium_index': 1,
'{settle}/tickers': 1,
'{settle}/funding_rate': 1,
'{settle}/insurance': 1,
'{settle}/contract_stats': 1,
'{settle}/index_constituents/{index}': 1,
'{settle}/liq_orders': 1,
'{settle}/risk_limit_tiers': 1,
},
},
'delivery': {
'get': {
'{settle}/contracts': 1,
'{settle}/contracts/{contract}': 1,
'{settle}/order_book': 1,
'{settle}/trades': 1,
'{settle}/candlesticks': 1,
'{settle}/tickers': 1,
'{settle}/insurance': 1,
},
},
'options': {
'get': {
'underlyings': 1,
'expirations': 1,
'contracts': 1,
'contracts/{contract}': 1,
'settlements': 1,
'settlements/{contract}': 1,
'order_book': 1,
'tickers': 1,
'underlying/tickers/{underlying}': 1,
'candlesticks': 1,
'underlying/candlesticks': 1,
'trades': 1,
},
},
'earn': {
'get': {
'uni/currencies': 1,
'uni/currencies/{currency}': 1,
},
},
},
'private': {
// private endpoints default is 150r/10s per endpoint
'withdrawals': {
'post': {
'withdrawals': 20,
'push': 1,
},
'delete': {
'withdrawals/{withdrawal_id}': 1,
},
},
'wallet': {
'get': {
'deposit_address': 1,
'withdrawals': 1,
'deposits': 1,
'sub_account_transfers': 1,
'order_status': 1,
'withdraw_status': 1,
'sub_account_balances': 2.5,
'sub_account_margin_balances': 2.5,
'sub_account_futures_balances': 2.5,
'sub_account_cross_margin_balances': 2.5,
'saved_address': 1,
'fee': 1,
'total_balance': 2.5,
'small_balance': 1,
'small_balance_history': 1,
'push': 1,
},
'post': {
'transfers': 2.5,
'sub_account_transfers': 2.5,
'sub_account_to_sub_account': 2.5,
'small_balance': 1,
},
},
'subAccounts': {
'get': {
'sub_accounts': 2.5,
'sub_accounts/{user_id}': 2.5,
'sub_accounts/{user_id}/keys': 2.5,
'sub_accounts/{user_id}/keys/{key}': 2.5,
},
'post': {
'sub_accounts': 2.5,
'sub_accounts/{user_id}/keys': 2.5,
'sub_accounts/{user_id}/lock': 2.5,
'sub_accounts/{user_id}/unlock': 2.5,
},
'put': {
'sub_accounts/{user_id}/keys/{key}': 2.5,
},
'delete': {
'sub_accounts/{user_id}/keys/{key}': 2.5,
},
},
'unified': {
'get': {
'accounts': 20 / 15,
'account_mode': 20 / 15,
'borrowable': 20 / 15,
'transferable': 20 / 15,
'loans': 20 / 15,
'loan_records': 20 / 15,
'interest_records': 20 / 15,
'estimate_rate': 20 / 15,
'currency_discount_tiers': 20 / 15,
'risk_units': 20 / 15,
'unified_mode': 20 / 15,
'loan_margin_tiers': 20 / 15,
'leverage/user_currency_config': 20 / 15,
'leverage/user_currency_setting': 20 / 15,
},
'post': {
'account_mode': 20 / 15,
'loans': 200 / 15,
'portfolio_calculator': 20 / 15,
'leverage/user_currency_setting': 20 / 15,
},
'put': {
'unified_mode': 20 / 15,
},
},
'spot': {
// default is 200r/10s
'get': {
'fee': 1,
'batch_fee': 1,
'accounts': 1,
'account_book': 1,
'open_orders': 1,
'orders': 1,
'orders/{order_id}': 1,
'my_trades': 1,
'price_orders': 1,
'price_orders/{order_id}': 1,
},
'post': {
'batch_orders': 0.4,
'cross_liquidate_orders': 1,
'orders': 0.4,
'cancel_batch_orders': 20 / 75,
'countdown_cancel_all': 20 / 75,
'amend_batch_orders': 0.4,
'price_orders': 0.4,
},
'delete': {
'orders': 20 / 75,
'orders/{order_id}': 20 / 75,
'price_orders': 20 / 75,
'price_orders/{order_id}': 20 / 75,
},
'patch': {
'orders/{order_id}': 0.4,
},
},
'margin': {
'get': {
'accounts': 20 / 15,
'account_book': 20 / 15,
'funding_accounts': 20 / 15,
'auto_repay': 20 / 15,
'transferable': 20 / 15,
'loans': 20 / 15,
'loans/{loan_id}': 20 / 15,
'loans/{loan_id}/repayment': 20 / 15,
'loan_records': 20 / 15,
'loan_records/{loan_record_id}': 20 / 15,
'borrowable': 20 / 15,
'cross/accounts': 20 / 15,
'cross/account_book': 20 / 15,
'cross/loans': 20 / 15,
'cross/loans/{loan_id}': 20 / 15,
'cross/repayments': 20 / 15,
'cross/interest_records': 20 / 15,
'cross/transferable': 20 / 15,
'cross/estimate_rate': 20 / 15,
'cross/borrowable': 20 / 15,
'uni/estimate_rate': 20 / 15,
'uni/loans': 20 / 15,
'uni/loan_records': 20 / 15,
'uni/interest_records': 20 / 15,
'uni/borrowable': 20 / 15,
},
'post': {
'auto_repay': 20 / 15,
'loans': 20 / 15,
'merged_loans': 20 / 15,
'loans/{loan_id}/repayment': 20 / 15,
'cross/loans': 20 / 15,
'cross/repayments': 20 / 15,
'uni/loans': 20 / 15,
},
'patch': {
'loans/{loan_id}': 20 / 15,
'loan_records/{loan_record_id}': 20 / 15,
},
'delete': {
'loans/{loan_id}': 20 / 15,
},
},
'flash_swap': {
'get': {
'currencies': 1,
'currency_pairs': 1,
'orders': 1,
'orders/{order_id}': 1,
},
'post': {
'orders': 1,
'orders/preview': 1,
},
},
'futures': {
'get': {
'{settle}/accounts': 1,
'{settle}/account_book': 1,
'{settle}/positions': 1,
'{settle}/positions/{contract}': 1,
'{settle}/dual_comp/positions/{contract}': 1,
'{settle}/orders': 1,
'{settle}/orders_timerange': 1,
'{settle}/orders/{order_id}': 1,
'{settle}/my_trades': 1,
'{settle}/my_trades_timerange': 1,
'{settle}/position_close': 1,
'{settle}/liquidates': 1,
'{settle}/auto_deleverages': 1,
'{settle}/fee': 1,
'{settle}/risk_limit_tiers': 1,
'{settle}/price_orders': 1,
'{settle}/price_orders/{order_id}': 1,
},
'post': {
'{settle}/positions/{contract}/margin': 1,
'{settle}/positions/{contract}/leverage': 1,
'{settle}/positions/{contract}/risk_limit': 1,
'{settle}/dual_mode': 1,
'{settle}/dual_comp/positions/{contract}/margin': 1,
'{settle}/dual_comp/positions/{contract}/leverage': 1,
'{settle}/dual_comp/positions/{contract}/risk_limit': 1,
'{settle}/orders': 0.4,
'{settle}/batch_orders': 0.4,
'{settle}/countdown_cancel_all': 0.4,
'{settle}/batch_cancel_orders': 0.4,
'{settle}/price_orders': 0.4,
},
'put': {
'{settle}/orders/{order_id}': 1,
},
'delete': {
'{settle}/orders': 20 / 75,
'{settle}/orders/{order_id}': 20 / 75,
'{settle}/price_orders': 20 / 75,
'{settle}/price_orders/{order_id}': 20 / 75,
},
},
'delivery': {
'get': {
'{settle}/accounts': 20 / 15,
'{settle}/account_book': 20 / 15,
'{settle}/positions': 20 / 15,
'{settle}/positions/{contract}': 20 / 15,
'{settle}/orders': 20 / 15,
'{settle}/orders/{order_id}': 20 / 15,
'{settle}/my_trades': 20 / 15,
'{settle}/position_close': 20 / 15,
'{settle}/liquidates': 20 / 15,
'{settle}/settlements': 20 / 15,
'{settle}/price_orders': 20 / 15,
'{settle}/price_orders/{order_id}': 20 / 15,
},
'post': {
'{settle}/positions/{contract}/margin': 20 / 15,
'{settle}/positions/{contract}/leverage': 20 / 15,
'{settle}/positions/{contract}/risk_limit': 20 / 15,
'{settle}/orders': 20 / 15,
'{settle}/price_orders': 20 / 15,
},
'delete': {
'{settle}/orders': 20 / 15,
'{settle}/orders/{order_id}': 20 / 15,
'{settle}/price_orders': 20 / 15,
'{settle}/price_orders/{order_id}': 20 / 15,
},
},
'options': {
'get': {
'my_settlements': 20 / 15,
'accounts': 20 / 15,
'account_book': 20 / 15,
'positions': 20 / 15,
'positions/{contract}': 20 / 15,
'position_close': 20 / 15,
'orders': 20 / 15,
'orders/{order_id}': 20 / 15,
'my_trades': 20 / 15,
'mmp': 20 / 15,
},
'post': {
'orders': 20 / 15,
'countdown_cancel_all': 20 / 15,
'mmp': 20 / 15,
'mmp/reset': 20 / 15,
},
'delete': {
'orders': 20 / 15,
'orders/{order_id}': 20 / 15,
},
},
'earn': {
'get': {
'uni/currencies': 20 / 15,
'uni/currencies/{currency}': 20 / 15,
'uni/lends': 20 / 15,
'uni/lend_records': 20 / 15,
'uni/interests/{currency}': 20 / 15,
'uni/interest_records': 20 / 15,
'uni/interest_status/{currency}': 20 / 15,
},
'post': {
'uni/lends': 20 / 15,
},
'put': {
'uni/interest_reinvest': 20 / 15,
},
'patch': {
'uni/lends': 20 / 15,
},
},
'loan': {
'get': {
'collateral/orders': 20 / 15,
'collateral/orders/{order_id}': 20 / 15,
'collateral/repay_records': 20 / 15,
'collateral/collaterals': 20 / 15,
'collateral/total_amount': 20 / 15,
'collateral/ltv': 20 / 15,
'collateral/currencies': 20 / 15,
'multi_collateral/orders': 20 / 15,
'multi_collateral/orders/{order_id}': 20 / 15,
'multi_collateral/repay': 20 / 15,
'multi_collateral/mortgage': 20 / 15,
'multi_collateral/currency_quota': 20 / 15,
'multi_collateral/currencies': 20 / 15,
'multi_collateral/ltv': 20 / 15,
'multi_collateral/fixed_rate': 20 / 15,
'multi_collateral/current_rate': 20 / 15,
},
'post': {
'collateral/orders': 20 / 15,
'collateral/repay': 20 / 15,
'collateral/collaterals': 20 / 15,
'multi_collateral/orders': 20 / 15,
'multi_collateral/repay': 20 / 15,
'multi_collateral/mortgage': 20 / 15,
},
},
'account': {
'get': {
'detail': 20 / 15,
'rate_limit': 20 / 15,
'stp_groups': 20 / 15,
'stp_groups/{stp_id}/users': 20 / 15,
'stp_groups/debit_fee': 20 / 15,
},
'post': {
'stp_groups': 20 / 15,
'stp_groups/{stp_id}/users': 20 / 15,
},
'delete': {
'stp_groups/{stp_id}/users': 20 / 15,
},
},
'rebate': {
'get': {
'agency/transaction_history': 20 / 15,
'agency/commission_history': 20 / 15,
},
},
},
},
'timeframes': {
'10s': '10s',
'1m': '1m',
'5m': '5m',
'15m': '15m',
'30m': '30m',
'1h': '1h',
'2h': '2h',
'4h': '4h',
'8h': '8h',
'1d': '1d',
'7d': '7d',
'1w': '7d',
},
// copied from gatev2
'commonCurrencies': {
'ORT': 'XREATORS',
'ASS': 'ASSF',
'88MPH': 'MPH',
'AXIS': 'AXISDEFI',
'BIFI': 'BITCOINFILE',
'BOX': 'DEFIBOX',
'BYN': 'BEYONDFI',
'EGG': 'GOOSEFINANCE',
'GTC': 'GAMECOM',
'GTC_HT': 'GAMECOM_HT',
'GTC_BSC': 'GAMECOM_BSC',
'HIT': 'HITCHAIN',
'MM': 'MILLION',
'MPH': 'MORPHER',
'POINT': 'GATEPOINT',
'RAI': 'RAIREFLEXINDEX',
'RED': 'RedLang',
'SBTC': 'SUPERBITCOIN',
'TNC': 'TRINITYNETWORKCREDIT',
'VAI': 'VAIOT',
'TRAC': 'TRACO', // conflict with OriginTrail (TRAC)
},
'requiredCredentials': {
'apiKey': true,
'secret': true,
},
'headers': {
'X-Gate-Channel-Id': 'ccxt',
},
'options': {
'timeDifference': 0,
'adjustForTimeDifference': false,
'sandboxMode': false,
'unifiedAccount': undefined,
'createOrder': {
'expiration': 86400, // for conditional orders
},
'createMarketBuyOrderRequiresPrice': true,
'networks': {
'BTC': 'BTC',
'BRC20': 'BTCBRC',
'ETH': 'ETH',
'ERC20': 'ETH',
'TRX': 'TRX',
'TRC20': 'TRX',
'HECO': 'HT',
'HRC20': 'HT',
'BSC': 'BSC',
'BEP20': 'BSC',
'SOL': 'SOL',
'POLYGON': 'POL',
'MATIC': 'POL',
'OP': 'OPETH',
'OPTIMISM': 'OPETH',
'ADA': 'ADA',
'AVAXC': 'AVAX_C',
'NEAR': 'NEAR',
'ARBONE': 'ARBEVM',
'BASE': 'BASEEVM',
'SUI': 'SUI',
'CRONOS': 'CRO',
'CRO': 'CRO',
'APT': 'APT',
'SCROLL': 'SCROLLETH',
'TAIKO': 'TAIKOETH',
'HYPE': 'HYPE',
'ALGO': 'ALGO',
// KAVA: ['KAVA', 'KAVAEVM']
// SEI: ['SEI', 'SEIEVM']
'LINEA': 'LINEAETH',
'BLAST': 'BLASTETH',
'XLM': 'XLM',
'RSK': 'RBTC',
'TON': 'TON',
'MNT': 'MNT',
// 'RUNE': 'BTCRUNES', probably, cant verify atm
'CELO': 'CELO',
'HBAR': 'HBAR',
// 'FTM': SONIC REBRAND, todo
'ZKSERA': 'ZKSERA',
'KLAY': 'KLAY',
'EOS': 'EOS',
'ACA': 'ACA',
// TLOS: ['TLOS', 'TLOSEVM']
// ASTR: ['ASTR', 'ASTREVM']
// CFX: ['CFX', 'CFXEVM']
'XTZ': 'XTZ',
'EGLD': 'EGLD',
'GLMR': 'GLMR',
'AURORA': 'AURORAEVM',
// others
'KON': 'KONET',
'GATECHAIN': 'GTEVM',
'KUSAMA': 'KSMSM',
'OKC': 'OKT',
'POLKADOT': 'DOTSM',
'LUNA': 'LUNC',
},
'networksById': {
'OPETH': 'OP',
'ETH': 'ERC20',
'ERC20': 'ERC20',
'TRX': 'TRC20',
'TRC20': 'TRC20',
'HT': 'HRC20',
'HECO': 'HRC20',
'BSC': 'BEP20',
'BEP20': 'BEP20',
'POLYGON': 'MATIC',
'POL': 'MATIC',
},
'timeInForce': {
'GTC': 'gtc',
'IOC': 'ioc',
'PO': 'poc',
'POC': 'poc',
'FOK': 'fok',
},
'accountsByType': {
'funding': 'spot',
'spot': 'spot',
'margin': 'margin',
'cross_margin': 'cross_margin',
'cross': 'cross_margin',
'isolated': 'margin',
'swap': 'futures',
'future': 'delivery',
'futures': 'futures',
'delivery': 'delivery',
'option': 'options',
'options': 'options',
},
'swap': {
'fetchMarkets': {
'settlementCurrencies': ['usdt', 'btc'],
},
},
'future': {
'fetchMarkets': {
'settlementCurrencies': ['usdt'],
},
},
},
'features': {
'default': {
'sandbox': true,
'createOrder': {
'marginMode': true,
'triggerPrice': true,
'triggerDirection': true,
'triggerPriceType': undefined,
'stopLossPrice': true,
'takeProfitPrice': true,
'attachedStopLossTakeProfit': undefined,
'timeInForce': {
'IOC': true,
'FOK': true,
'PO': true,
'GTD': false,
},
'hedged': false,
'trailing': false,
'iceberg': true,
'selfTradePrevention': true,
'leverage': false,
'marketBuyByCost': true,
'marketBuyRequiresPrice': true,
},
'createOrders': {
'max': 40, // NOTE! max 10 per symbol
},
'fetchMyTrades': {
'marginMode': true,
'limit': 1000,
'daysBack': undefined,
'untilDays': 30,
'symbolRequired': false,
},
'fetchOrder': {
'marginMode': false,
'trigger': true,
'trailing': false,
'symbolRequired': true,
},
'fetchOpenOrders': {
'marginMode': true,
'trigger': true,
'trailing': false,
'limit': 100,
'symbolRequired': false,
},
'fetchOrders': undefined,
'fetchClosedOrders': {
'marginMode': true,
'trigger': true,
'trailing': false,
'limit': 100,
'untilDays': 30,
'daysBack': undefined,
'daysBackCanceled': undefined,
'symbolRequired': false,
},
'fetchOHLCV': {
'limit': 1000,
},
},
'spot': {
'extends': 'default',
},
'forDerivatives': {
'extends': 'spot',
'createOrder': {
'marginMode': false,
'triggerPriceType': {
'last': true,
'mark': true,
'index': true,
},
},
'createOrders': {
'max': 10,
},
'fetchMyTrades': {
'marginMode': false,
'untilDays': undefined,
},
'fetchOpenOrders': {
'marginMode': false,
},
'fetchClosedOrders': {
'marginMode': false,
'untilDays': undefined,
'limit': 1000,
},
'fetchOHLCV': {
'limit': 1999,
},
},
'swap': {
'linear': {
'extends': 'forDerivatives',
},
'inverse': {
'extends': 'forDerivatives',
},
},
'future': {
'linear': {
'extends': 'forDerivatives',
},
'inverse': {
'extends': 'forDerivatives',
},
},
},
'precisionMode': TICK_SIZE,
'fees': {
'trading': {
'tierBased': true,
'feeSide': 'get',
'percentage': true,
'maker': this.parseNumber('0.002'),
'taker': this.parseNumber('0.002'),
'tiers': {
// volume is in BTC
'maker': [
[this.parseNumber('0'), this.parseNumber('0.002')],
[this.parseNumber('1.5'), this.parseNumber('0.00185')],
[this.parseNumber('3'), this.parseNumber('0.00175')],
[this.parseNumber('6'), this.parseNumber('0.00165')],
[this.parseNumber('12.5'), this.parseNumber('0.00155')],
[this.parseNumber('25'), this.parseNumber('0.00145')],
[this.parseNumber('75'), this.parseNumber('0.00135')],
[this.parseNumber('200'), this.parseNumber('0.00125')],
[this.parseNumber('500'), this.parseNumber('0.00115')],
[this.parseNumber('1250'), this.parseNumber('0.00105')],
[this.parseNumber('2500'), this.parseNumber('0.00095')],
[this.parseNumber('3000'), this.parseNumber('0.00085')],
[this.parseNumber('6000'), this.parseNumber('0.00075')],
[this.parseNumber('11000'), this.parseNumber('0.00065')],
[this.parseNumber('20000'), this.parseNumber('0.00055')],
[this.parseNumber('40000'), this.parseNumber('0.00055')],
[this.parseNumber('75000'), this.parseNumber('0.00055')],
],
'taker': [
[this.parseNumber('0'), this.parseNumber('0.002')],
[this.parseNumber('1.5'), this.parseNumber('0.00195')],
[this.parseNumber('3'), this.parseNumber('0.00185')],
[this.parseNumber('6'), this.parseNumber('0.00175')],
[this.parseNumber('12.5'), this.parseNumber('0.00165')],
[this.parseNumber('25'), this.parseNumber('0.00155')],
[this.parseNumber('75'), this.parseNumber('0.00145')],
[this.parseNumber('200'), this.parseNumber('0.00135')],
[this.parseNumber('500'), this.parseNumber('0.00125')],
[this.parseNumber('1250'), this.parseNumber('0.00115')],
[this.parseNumber('2500'), this.parseNumber('0.00105')],
[this.parseNumber('3000'), this.parseNumber('0.00095')],
[this.parseNumber('6000'), this.parseNumber('0.00085')],
[this.parseNumber('11000'), this.parseNumber('0.00075')],
[this.parseNumber('20000'), this.parseNumber('0.00065')],
[this.parseNumber('40000'), this.parseNumber('0.00065')],
[this.parseNumber('75000'), this.parseNumber('0.00065')],
],
},
},
'swap': {
'tierBased': true,
'feeSide': 'base',
'percentage': true,
'maker': this.parseNumber('0.0'),
'taker': this.parseNumber('0.0005'),
'tiers': {
'maker': [
[this.parseNumber('0'), this.parseNumber('0.0000')],
[this.parseNumber('1.5'), this.parseNumber('-0.00005')],
[this.parseNumber('3'), this.parseNumber('-0.00005')],
[this.parseNumber('6'), this.parseNumber('-0.00005')],
[this.parseNumber('12.5'), this.parseNumber('-0.00005')],
[this.parseNumber('25'), this.parseNumber('-0.00005')],
[this.parseNumber('75'), this.parseNumber('-0.00005')],
[this.parseNumber('200'), this.parseNumber('-0.00005')],
[this.parseNumber('500'), this.parseNumber('-0.00005')],
[this.parseNumber('1250'), this.parseNumber('-0.00005')],
[this.parseNumber('2500'), this.parseNumber('-0.00005')],
[this.parseNumber('3000'), this.parseNumber('-0.00008')],
[this.parseNumber('6000'), this.parseNumber('-0.01000')],
[this.parseNumber('11000'), this.parseNumber('-0.01002')],
[this.parseNumber('20000'), this.parseNumber('-0.01005')],
[this.parseNumber('40000'), this.parseNumber('-0.02000')],
[this.parseNumber('75000'), this.parseNumber('-0.02005')],
],
'taker': [
[this.parseNumber('0'), this.parseNumber('0.00050')],
[this.parseNumber('1.5'), this.parseNumber('0.00048')],
[this.parseNumber('3'), this.parseNumber('0.00046')],
[this.parseNumber('6'), this.parseNumber('0.00044')],
[this.parseNumber('12.5'), this.parseNumber('0.00042')],
[this.parseNumber('25'), this.parseNumber('0.00040')],
[this.parseNumber('75'), this.parseNumber('0.00038')],
[this.parseNumber('200'), this.parseNumber('0.00036')],
[this.parseNumber('500'), this.parseNumber('0.00034')],
[this.parseNumber('1250'), this.parseNumber('0.00032')],
[this.parseNumber('2500'), this.parseNumber('0.00030')],
[this.parseNumber('3000'), this.parseNumber('0.00030')],
[this.parseNumber('6000'), this.parseNumber('0.00030')],
[this.parseNumber('11000'), this.parseNumber('0.00030')],
[this.parseNumber('20000'), this.parseNumber('0.00030')],
[this.parseNumber('40000'), this.parseNumber('0.00030')],
[this.parseNumber('75000'), this.parseNumber('0.00030')],
],
},
},
},
// https://www.gate.io/docs/developers/apiv4/en/#label-list
'exceptions': {
'exact': {
'INVALID_PARAM_VALUE': BadRequest,
'INVALID_PROTOCOL': BadRequest,
'INVALID_ARGUMENT': BadRequest,
'INVALID_REQUEST_BODY': BadRequest,
'MISSING_REQUIRED_PARAM': ArgumentsRequired,
'BAD_REQUEST': BadRequest,
'INVALID_CONTENT_TYPE': BadRequest,
'NOT_ACCEPTABLE': BadRequest,
'METHOD_NOT_ALLOWED': BadRequest,
'NOT_FOUND': ExchangeError,
'AUTHENTICATION_FAILED': AuthenticationError,
'INVALID_CREDENTIALS': AuthenticationError,
'INVALID_KEY': AuthenticationError,
'IP_FORBIDDEN': AuthenticationError,
'READ_ONLY': PermissionDenied,
'INVALID_SIGNATURE': AuthenticationError,
'MISSING_REQUIRED_HEADER': AuthenticationError,
'REQUEST_EXPIRED': AuthenticationError,
'ACCOUNT_LOCKED': AccountSuspended,
'FORBIDDEN': PermissionDenied,
'SUB_ACCOUNT_NOT_FOUND': ExchangeError,
'SUB_ACCOUNT_LOCKED': AccountSuspended,
'MARGIN_BALANCE_EXCEPTION': ExchangeError,
'MARGIN_TRANSFER_FAILED': ExchangeError,
'TOO_MUCH_FUTURES_AVAILABLE': ExchangeError,
'FUTURES_BALANCE_NOT_ENOUGH': InsufficientFunds,
'ACCOUNT_EXCEPTION': ExchangeError,
'SUB_ACCOUNT_TRANSFER_FAILED': ExchangeError,
'ADDRESS_NOT_USED': ExchangeError,
'TOO_FAST': RateLimitExceeded,
'WITHDRAWAL_OVER_LIMIT': ExchangeError,
'API_WITHDRAW_DISABLED': ExchangeNotAvailable,
'INVALID_WITHDRAW_ID': ExchangeError,
'INVALID_WITHDRAW_CANCEL_STATUS': ExchangeError,
'INVALID_PRECISION': InvalidOrder,
'INVALID_CURRENCY': BadSymbol,
'INVALID_CURRENCY_PAIR': BadSymbol,
'POC_FILL_IMMEDIATELY': OrderImmediatelyFillable,
'ORDER_NOT_FOUND': OrderNotFound,
'CLIENT_ID_NOT_FOUND': OrderNotFound,
'ORDER_CLOSED': InvalidOrder,
'ORDER_CANCELLED': InvalidOrder,
'QUANTITY_NOT_ENOUGH': InvalidOrder,
'BALANCE_NOT_ENOUGH': InsufficientFunds,
'MARGIN_NOT_SUPPORTED': InvalidOrder,
'MARGIN_BALANCE_NOT_ENOUGH': InsufficientFunds,
'AMOUNT_TOO_LITTLE': InvalidOrder,
'AMOUNT_TOO_MUCH': InvalidOrder,
'REPEATED_CREATION': InvalidOrder,
'LOAN_NOT_FOUND': OrderNotFound,
'LOAN_RECORD_NOT_FOUND': OrderNotFound,
'NO_MATCHED_LOAN': ExchangeError,
'NOT_MERGEABLE': ExchangeError,
'NO_CHANGE': ExchangeError,
'REPAY_TOO_MUCH': ExchangeError,
'TOO_MANY_CURRENCY_PAIRS': InvalidOrder,
'TOO_MANY_ORDERS': InvalidOrder,
'TOO_MANY_REQUESTS': RateLimitExceeded,
'MIXED_ACCOUNT_TYPE': InvalidOrder,
'AUTO_BORROW_TOO_MUCH': ExchangeError,
'TRADE_RESTRICTED': InsufficientFunds,
'USER_NOT_FOUND': AccountNotEnabled,
'CONTRACT_NO_COUNTER': ExchangeError,
'CONTRACT_NOT_FOUND': BadSymbol,
'RISK_LIMIT_EXCEEDED': ExchangeError,
'INSUFFICIENT_AVAILABLE': InsufficientFunds,
'LIQUIDATE_IMMEDIATELY': InvalidOrder,
'LEVERAGE_TOO_HIGH': InvalidOrder,
'LEVERAGE_TOO_LOW': InvalidOrder,
'ORDER_NOT_OWNED': ExchangeError,
'ORDER_FINISHED': ExchangeError,
'POSITION_CROSS_MARGIN': ExchangeError,
'POSITION_IN_LIQUIDATION': ExchangeError,
'POSITION_IN_CLOSE': ExchangeError,
'POSITION_EMPTY': InvalidOrder,
'REMOVE_TOO_MUCH': ExchangeError,
'RISK_LIMIT_NOT_MULTIPLE': ExchangeError,
'RISK_LIMIT_TOO_HIGH': ExchangeError,
'RISK_LIMIT_TOO_lOW': ExchangeError,
'PRICE_TOO_DEVIATED': InvalidOrder,
'SIZE_TOO_LARGE': InvalidOrder,