Files
gocryptotrader/exchanges/gateio/ratelimiter.go
Ryan O'Hara-Reid 977fecab19 gateio: add ConvertSmallBalances, GetAccountDetails and GetUserTransactionRateLimitInfo API endpoints (#1889)
* gateio: add function ConvertSmallBalances

* glorious/Thrasher: nits/additions

* file standard

* glorious: nit

* AI: nit

* boss king: nit

* refactor: rename account detail functions and types for consistency

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
2025-04-22 12:46:54 +10:00

422 lines
16 KiB
Go

package gateio
import (
"time"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
)
// GateIO endpoints limits. See: https://www.gate.io/docs/developers/apiv4/en/#frequency-limit-rule
const (
publicTickersSpotEPL request.EndpointLimit = iota + 1
publicOrderbookSpotEPL
publicMarketTradesSpotEPL
publicCandleStickSpotEPL
publicCurrencyPairDetailSpotEPL
publicListCurrencyPairsSpotEPL
publicCurrenciesSpotEPL
publicCurrencyPairsMarginEPL
publicOrderbookMarginEPL
publicInsuranceDeliveryEPL
publicDeliveryContractsEPL
publicOrderbookDeliveryEPL
publicTradingHistoryDeliveryEPL
publicCandleSticksDeliveryEPL
publicTickersDeliveryEPL
publicFuturesContractsEPL
publicOrderbookFuturesEPL
publicTradingHistoryFuturesEPL
publicCandleSticksFuturesEPL
publicPremiumIndexEPL
publicTickersFuturesEPL
publicFundingRatesEPL
publicInsuranceFuturesEPL
publicStatsFuturesEPL
publicIndexConstituentsEPL
publicLiquidationHistoryEPL
publicUnderlyingOptionsEPL
publicExpirationOptionsEPL
publicContractsOptionsEPL
publicSettlementOptionsEPL
publicOrderbookOptionsEPL
publicTickerOptionsEPL
publicUnderlyingTickerOptionsEPL
publicCandleSticksOptionsEPL
publicMarkpriceCandleSticksOptionsEPL
publicTradeHistoryOptionsEPL
publicGetServerTimeEPL
publicFlashSwapEPL
publicListCurrencyChainEPL
walletDepositAddressEPL
walletWithdrawalRecordsEPL
walletDepositRecordsEPL
walletTransferCurrencyEPL
walletSubAccountTransferEPL
walletSubAccountTransferHistoryEPL
walletSubAccountToSubAccountTransferEPL
walletWithdrawStatusEPL
walletSubAccountBalancesEPL
walletSubAccountMarginBalancesEPL
walletSubAccountFuturesBalancesEPL
walletSubAccountCrossMarginBalancesEPL
walletSavedAddressesEPL
walletTradingFeeEPL
walletTotalBalanceEPL
walletConvertSmallBalancesEPL
walletWithdrawEPL
walletCancelWithdrawEPL
subAccountEPL
spotTradingFeeEPL
spotAccountsEPL
spotGetOpenOrdersEPL
spotClosePositionEPL
spotBatchOrdersEPL
spotPlaceOrderEPL
spotGetOrdersEPL
spotCancelAllOpenOrdersEPL
spotCancelBatchOrdersEPL
spotGetOrderEPL
spotAmendOrderEPL
spotCancelSingleOrderEPL
spotTradingHistoryEPL
spotCountdownCancelEPL
spotCreateTriggerOrderEPL
spotGetTriggerOrderListEPL
spotCancelTriggerOrdersEPL
spotGetTriggerOrderEPL
spotCancelTriggerOrderEPL
marginAccountListEPL
marginAccountBalanceEPL
marginFundingAccountListEPL
marginLendBorrowEPL
marginAllLoansEPL
marginMergeLendingLoansEPL
marginGetLoanEPL
marginModifyLoanEPL
marginCancelLoanEPL
marginRepayLoanEPL
marginListLoansEPL
marginRepaymentRecordEPL
marginSingleRecordEPL
marginModifyLoanRecordEPL
marginAutoRepayEPL
marginGetAutoRepaySettingsEPL
marginGetMaxTransferEPL
marginGetMaxBorrowEPL
marginSupportedCurrencyCrossListEPL
marginSupportedCurrencyCrossEPL
marginAccountsEPL
marginAccountHistoryEPL
marginCreateCrossBorrowLoanEPL
marginExecuteRepaymentsEPL
marginGetCrossMarginRepaymentsEPL
marginGetMaxTransferCrossEPL
marginGetMaxBorrowCrossEPL
marginGetCrossBorrowHistoryEPL
marginGetBorrowEPL
flashSwapOrderEPL
flashGetOrdersEPL
flashGetOrderEPL
flashOrderReviewEPL
privateUnifiedSpotEPL
perpetualAccountEPL
perpetualAccountBooksEPL
perpetualPositionsEPL
perpetualPositionEPL
perpetualUpdateMarginEPL
perpetualUpdateLeverageEPL
perpetualUpdateRiskEPL
perpetualToggleDualModeEPL
perpetualPositionsDualModeEPL
perpetualUpdateMarginDualModeEPL
perpetualUpdateLeverageDualModeEPL
perpetualUpdateRiskDualModeEPL
perpetualSubmitOrderEPL
perpetualGetOrdersEPL
perpetualSubmitBatchOrdersEPL
perpetualFetchOrderEPL
perpetualCancelOrderEPL
perpetualAmendOrderEPL
perpetualTradingHistoryEPL
perpetualClosePositionEPL
perpetualLiquidationHistoryEPL
perpetualCancelTriggerOrdersEPL
perpetualSubmitTriggerOrderEPL
perpetualListOpenOrdersEPL
perpetualCancelOpenOrdersEPL
perpetualGetTriggerOrderEPL
perpetualCancelTriggerOrderEPL
deliveryAccountEPL
deliveryAccountBooksEPL
deliveryPositionsEPL
deliveryUpdateMarginEPL
deliveryUpdateLeverageEPL
deliveryUpdateRiskLimitEPL
deliverySubmitOrderEPL
deliveryGetOrdersEPL
deliveryCancelOrdersEPL
deliveryGetOrderEPL
deliveryCancelOrderEPL
deliveryTradingHistoryEPL
deliveryCloseHistoryEPL
deliveryLiquidationHistoryEPL
deliverySettlementHistoryEPL
deliveryGetTriggerOrdersEPL
deliveryAutoOrdersEPL
deliveryCancelTriggerOrdersEPL
deliveryGetTriggerOrderEPL
deliveryCancelTriggerOrderEPL
optionsSettlementsEPL
optionsAccountsEPL
optionsAccountBooksEPL
optionsPositions
optionsLiquidationHistoryEPL
optionsSubmitOrderEPL
optionsOrdersEPL
optionsCancelOrdersEPL
optionsOrderEPL
optionsCancelOrderEPL
optionsTradingHistoryEPL
websocketRateLimitNotNeededEPL
)
// package level rate limits for REST API
var packageRateLimits = request.RateLimitDefinitions{
publicOrderbookSpotEPL: standardRateLimit(),
publicMarketTradesSpotEPL: standardRateLimit(),
publicCandleStickSpotEPL: standardRateLimit(),
publicTickersSpotEPL: standardRateLimit(),
publicCurrencyPairDetailSpotEPL: standardRateLimit(),
publicListCurrencyPairsSpotEPL: standardRateLimit(),
publicCurrenciesSpotEPL: standardRateLimit(),
publicCurrencyPairsMarginEPL: standardRateLimit(),
publicOrderbookMarginEPL: standardRateLimit(),
publicInsuranceDeliveryEPL: standardRateLimit(),
publicDeliveryContractsEPL: standardRateLimit(),
publicOrderbookDeliveryEPL: standardRateLimit(),
publicTradingHistoryDeliveryEPL: standardRateLimit(),
publicCandleSticksDeliveryEPL: standardRateLimit(),
publicTickersDeliveryEPL: standardRateLimit(),
publicFuturesContractsEPL: standardRateLimit(),
publicOrderbookFuturesEPL: standardRateLimit(),
publicTradingHistoryFuturesEPL: standardRateLimit(),
publicCandleSticksFuturesEPL: standardRateLimit(),
publicPremiumIndexEPL: standardRateLimit(),
publicTickersFuturesEPL: standardRateLimit(),
publicFundingRatesEPL: standardRateLimit(),
publicInsuranceFuturesEPL: standardRateLimit(),
publicStatsFuturesEPL: standardRateLimit(),
publicIndexConstituentsEPL: standardRateLimit(),
publicLiquidationHistoryEPL: standardRateLimit(),
publicUnderlyingOptionsEPL: standardRateLimit(),
publicExpirationOptionsEPL: standardRateLimit(),
publicContractsOptionsEPL: standardRateLimit(),
publicSettlementOptionsEPL: standardRateLimit(),
publicOrderbookOptionsEPL: standardRateLimit(),
publicTickerOptionsEPL: standardRateLimit(),
publicUnderlyingTickerOptionsEPL: standardRateLimit(),
publicCandleSticksOptionsEPL: standardRateLimit(),
publicMarkpriceCandleSticksOptionsEPL: standardRateLimit(),
publicTradeHistoryOptionsEPL: standardRateLimit(),
publicGetServerTimeEPL: standardRateLimit(),
publicFlashSwapEPL: standardRateLimit(),
publicListCurrencyChainEPL: standardRateLimit(),
walletDepositAddressEPL: standardRateLimit(),
walletWithdrawalRecordsEPL: standardRateLimit(),
walletDepositRecordsEPL: standardRateLimit(),
walletTransferCurrencyEPL: personalAccountRateLimit(),
walletSubAccountTransferEPL: personalAccountRateLimit(),
walletSubAccountTransferHistoryEPL: standardRateLimit(),
walletSubAccountToSubAccountTransferEPL: personalAccountRateLimit(),
walletWithdrawStatusEPL: standardRateLimit(),
walletSubAccountBalancesEPL: personalAccountRateLimit(),
walletSubAccountMarginBalancesEPL: personalAccountRateLimit(),
walletSubAccountFuturesBalancesEPL: personalAccountRateLimit(),
walletSubAccountCrossMarginBalancesEPL: personalAccountRateLimit(),
walletSavedAddressesEPL: standardRateLimit(),
walletTradingFeeEPL: standardRateLimit(),
walletTotalBalanceEPL: personalAccountRateLimit(),
walletConvertSmallBalancesEPL: personalAccountRateLimit(),
walletWithdrawEPL: withdrawFromWalletRateLimit(),
walletCancelWithdrawEPL: standardRateLimit(),
subAccountEPL: personalAccountRateLimit(),
spotTradingFeeEPL: standardRateLimit(),
spotAccountsEPL: standardRateLimit(),
spotGetOpenOrdersEPL: standardRateLimit(),
spotClosePositionEPL: orderCloseRateLimit(),
spotBatchOrdersEPL: spotOrderPlacementRateLimit(),
spotPlaceOrderEPL: spotOrderPlacementRateLimit(),
spotGetOrdersEPL: standardRateLimit(),
spotCancelAllOpenOrdersEPL: orderCloseRateLimit(),
spotCancelBatchOrdersEPL: orderCloseRateLimit(),
spotGetOrderEPL: standardRateLimit(),
spotAmendOrderEPL: spotOrderPlacementRateLimit(),
spotCancelSingleOrderEPL: orderCloseRateLimit(),
spotTradingHistoryEPL: standardRateLimit(),
spotCountdownCancelEPL: orderCloseRateLimit(),
spotCreateTriggerOrderEPL: spotOrderPlacementRateLimit(),
spotGetTriggerOrderListEPL: standardRateLimit(),
spotCancelTriggerOrdersEPL: orderCloseRateLimit(),
spotGetTriggerOrderEPL: standardRateLimit(),
spotCancelTriggerOrderEPL: orderCloseRateLimit(),
marginAccountListEPL: otherPrivateEndpointRateLimit(),
marginAccountBalanceEPL: otherPrivateEndpointRateLimit(),
marginFundingAccountListEPL: otherPrivateEndpointRateLimit(),
marginLendBorrowEPL: otherPrivateEndpointRateLimit(),
marginAllLoansEPL: otherPrivateEndpointRateLimit(),
marginMergeLendingLoansEPL: otherPrivateEndpointRateLimit(),
marginGetLoanEPL: otherPrivateEndpointRateLimit(),
marginModifyLoanEPL: otherPrivateEndpointRateLimit(),
marginCancelLoanEPL: otherPrivateEndpointRateLimit(),
marginRepayLoanEPL: otherPrivateEndpointRateLimit(),
marginListLoansEPL: otherPrivateEndpointRateLimit(),
marginRepaymentRecordEPL: otherPrivateEndpointRateLimit(),
marginSingleRecordEPL: otherPrivateEndpointRateLimit(),
marginModifyLoanRecordEPL: otherPrivateEndpointRateLimit(),
marginAutoRepayEPL: otherPrivateEndpointRateLimit(),
marginGetAutoRepaySettingsEPL: otherPrivateEndpointRateLimit(),
marginGetMaxTransferEPL: otherPrivateEndpointRateLimit(),
marginGetMaxBorrowEPL: otherPrivateEndpointRateLimit(),
marginSupportedCurrencyCrossListEPL: otherPrivateEndpointRateLimit(),
marginSupportedCurrencyCrossEPL: otherPrivateEndpointRateLimit(),
marginAccountsEPL: otherPrivateEndpointRateLimit(),
marginAccountHistoryEPL: otherPrivateEndpointRateLimit(),
marginCreateCrossBorrowLoanEPL: otherPrivateEndpointRateLimit(),
marginExecuteRepaymentsEPL: otherPrivateEndpointRateLimit(),
marginGetCrossMarginRepaymentsEPL: otherPrivateEndpointRateLimit(),
marginGetMaxTransferCrossEPL: otherPrivateEndpointRateLimit(),
marginGetMaxBorrowCrossEPL: otherPrivateEndpointRateLimit(),
marginGetCrossBorrowHistoryEPL: otherPrivateEndpointRateLimit(),
marginGetBorrowEPL: otherPrivateEndpointRateLimit(),
flashSwapOrderEPL: otherPrivateEndpointRateLimit(),
flashGetOrdersEPL: otherPrivateEndpointRateLimit(),
flashGetOrderEPL: otherPrivateEndpointRateLimit(),
flashOrderReviewEPL: otherPrivateEndpointRateLimit(),
perpetualAccountEPL: standardRateLimit(),
perpetualAccountBooksEPL: standardRateLimit(),
perpetualPositionsEPL: standardRateLimit(),
perpetualPositionEPL: standardRateLimit(),
perpetualUpdateMarginEPL: standardRateLimit(),
perpetualUpdateLeverageEPL: standardRateLimit(),
perpetualUpdateRiskEPL: standardRateLimit(),
perpetualToggleDualModeEPL: standardRateLimit(),
perpetualPositionsDualModeEPL: standardRateLimit(),
perpetualUpdateMarginDualModeEPL: standardRateLimit(),
perpetualUpdateLeverageDualModeEPL: standardRateLimit(),
perpetualUpdateRiskDualModeEPL: standardRateLimit(),
perpetualSubmitOrderEPL: perpetualOrderplacementRateLimit(),
perpetualGetOrdersEPL: standardRateLimit(),
perpetualSubmitBatchOrdersEPL: perpetualOrderplacementRateLimit(),
perpetualFetchOrderEPL: standardRateLimit(),
perpetualCancelOrderEPL: orderCloseRateLimit(),
perpetualAmendOrderEPL: perpetualOrderplacementRateLimit(),
perpetualTradingHistoryEPL: standardRateLimit(),
perpetualClosePositionEPL: orderCloseRateLimit(),
perpetualLiquidationHistoryEPL: standardRateLimit(),
perpetualCancelTriggerOrdersEPL: orderCloseRateLimit(),
perpetualSubmitTriggerOrderEPL: perpetualOrderplacementRateLimit(),
perpetualListOpenOrdersEPL: standardRateLimit(),
perpetualCancelOpenOrdersEPL: orderCloseRateLimit(),
perpetualGetTriggerOrderEPL: standardRateLimit(),
perpetualCancelTriggerOrderEPL: orderCloseRateLimit(),
deliveryAccountEPL: standardRateLimit(),
deliveryAccountBooksEPL: standardRateLimit(),
deliveryPositionsEPL: standardRateLimit(),
deliveryUpdateMarginEPL: standardRateLimit(),
deliveryUpdateLeverageEPL: standardRateLimit(),
deliveryUpdateRiskLimitEPL: standardRateLimit(),
deliverySubmitOrderEPL: deliverySubmitCancelAmendRateLimit(),
deliveryGetOrdersEPL: standardRateLimit(),
deliveryCancelOrdersEPL: deliverySubmitCancelAmendRateLimit(),
deliveryGetOrderEPL: standardRateLimit(),
deliveryCancelOrderEPL: deliverySubmitCancelAmendRateLimit(),
deliveryTradingHistoryEPL: standardRateLimit(),
deliveryCloseHistoryEPL: standardRateLimit(),
deliveryLiquidationHistoryEPL: standardRateLimit(),
deliverySettlementHistoryEPL: standardRateLimit(),
deliveryGetTriggerOrdersEPL: standardRateLimit(),
deliveryAutoOrdersEPL: standardRateLimit(),
deliveryCancelTriggerOrdersEPL: deliverySubmitCancelAmendRateLimit(),
deliveryGetTriggerOrderEPL: standardRateLimit(),
deliveryCancelTriggerOrderEPL: deliverySubmitCancelAmendRateLimit(),
optionsSettlementsEPL: standardRateLimit(),
optionsAccountsEPL: standardRateLimit(),
optionsAccountBooksEPL: standardRateLimit(),
optionsPositions: standardRateLimit(),
optionsLiquidationHistoryEPL: standardRateLimit(),
optionsSubmitOrderEPL: optionsSubmitCancelAmendRateLimit(),
optionsOrdersEPL: standardRateLimit(),
optionsCancelOrdersEPL: optionsSubmitCancelAmendRateLimit(),
optionsOrderEPL: standardRateLimit(),
optionsCancelOrderEPL: optionsSubmitCancelAmendRateLimit(),
optionsTradingHistoryEPL: standardRateLimit(),
privateUnifiedSpotEPL: standardRateLimit(),
websocketRateLimitNotNeededEPL: nil, // no rate limit for certain websocket functions
}
func standardRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second*10, 200, 1)
}
func personalAccountRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second*10, 80, 1)
}
func orderCloseRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second, 200, 1)
}
func spotOrderPlacementRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second, 10, 1)
}
func otherPrivateEndpointRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second*10, 150, 1)
}
func perpetualOrderplacementRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second, 100, 1)
}
func deliverySubmitCancelAmendRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second*10, 500, 1)
}
func optionsSubmitCancelAmendRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second, 200, 1)
}
func withdrawFromWalletRateLimit() *request.RateLimiterWithWeight {
return request.NewRateLimitWithWeight(time.Second*3, 1, 1)
}