mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
* initial consolidation of rate limiting code to request package to reduce bespoke code implementation * continued * finish abstraction * lint * exchanges: fix tests * linter: fix * poloniex: fix auth rate limit not being set * ratelimiter: convert from token to weight * glorious: nits addressed with fire * linter: rip * change func name set -> get * fix test * derbit: impl --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
256 lines
13 KiB
Go
256 lines
13 KiB
Go
package bitfinex
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
|
)
|
|
|
|
const (
|
|
// Bitfinex rate limits - Public
|
|
requestLimitInterval = time.Minute
|
|
platformStatusReqRate = 15
|
|
tickerBatchReqRate = 30
|
|
tickerReqRate = 30
|
|
tradeReqRate = 30
|
|
orderbookReqRate = 30
|
|
statsReqRate = 90
|
|
candleReqRate = 60
|
|
configsReqRate = 15
|
|
statusReqRate = 15 // This is not specified just inputted WCS
|
|
liquidReqRate = 15 // This is not specified just inputted WCS
|
|
leaderBoardReqRate = 90
|
|
marketAveragePriceReqRate = 20
|
|
fxReqRate = 20
|
|
|
|
// Bitfinex rate limits - Authenticated
|
|
// Wallets -
|
|
accountWalletBalanceReqRate = 45
|
|
accountWalletHistoryReqRate = 45
|
|
// Orders -
|
|
retrieveOrderReqRate = 45
|
|
submitOrderReqRate = 45 // This is not specified just inputted above
|
|
updateOrderReqRate = 45 // This is not specified just inputted above
|
|
cancelOrderReqRate = 45 // This is not specified just inputted above
|
|
orderBatchReqRate = 45 // This is not specified just inputted above
|
|
cancelBatchReqRate = 45 // This is not specified just inputted above
|
|
orderHistoryReqRate = 45
|
|
getOrderTradesReqRate = 45
|
|
getTradesReqRate = 45
|
|
getLedgersReqRate = 45
|
|
// Positions -
|
|
getAccountMarginInfoReqRate = 45
|
|
getActivePositionsReqRate = 45
|
|
claimPositionReqRate = 45 // This is not specified just inputted above
|
|
getPositionHistoryReqRate = 45
|
|
getPositionAuditReqRate = 45
|
|
updateCollateralOnPositionReqRate = 45 // This is not specified just inputted above
|
|
// Margin funding -
|
|
getMarginInfoRate = 90
|
|
getActiveFundingOffersReqRate = 45
|
|
submitFundingOfferReqRate = 45 // This is not specified just inputted above
|
|
cancelFundingOfferReqRate = 45
|
|
cancelAllFundingOfferReqRate = 45 // This is not specified just inputted above
|
|
closeFundingReqRate = 45 // This is not specified just inputted above
|
|
fundingAutoRenewReqRate = 45 // This is not specified just inputted above
|
|
keepFundingReqRate = 45 // This is not specified just inputted above
|
|
getOffersHistoryReqRate = 45
|
|
getFundingLoansReqRate = 45
|
|
getFundingLoanHistoryReqRate = 45
|
|
getFundingCreditsReqRate = 45
|
|
getFundingCreditsHistoryReqRate = 45
|
|
getFundingTradesReqRate = 45
|
|
getFundingInfoReqRate = 45
|
|
// Account actions
|
|
getUserInfoReqRate = 45
|
|
transferBetweenWalletsReqRate = 45 // This is not specified just inputted above
|
|
getDepositAddressReqRate = 45 // This is not specified just inputted above
|
|
withdrawalReqRate = 45 // This is not specified just inputted above
|
|
getMovementsReqRate = 45
|
|
getAlertListReqRate = 45
|
|
setPriceAlertReqRate = 45 // This is not specified just inputted above
|
|
deletePriceAlertReqRate = 45 // This is not specified just inputted above
|
|
getBalanceForOrdersOffersReqRate = 30
|
|
userSettingsWriteReqRate = 45 // This is not specified just inputted general count
|
|
userSettingsReadReqRate = 45
|
|
userSettingsDeleteReqRate = 45 // This is not specified just inputted above
|
|
// Account V1 endpoints
|
|
getAccountFeesReqRate = 5
|
|
getWithdrawalFeesReqRate = 5
|
|
getAccountSummaryReqRate = 5 // This is not specified just inputted above
|
|
newDepositAddressReqRate = 5 // This is not specified just inputted above
|
|
getKeyPermissionsReqRate = 5 // This is not specified just inputted above
|
|
getMarginInfoReqRate = 5 // This is not specified just inputted above
|
|
getAccountBalanceReqRate = 10
|
|
walletTransferReqRate = 10 // This is not specified just inputted above
|
|
withdrawV1ReqRate = 10 // This is not specified just inputted above
|
|
orderV1ReqRate = 10 // This is not specified just inputted above
|
|
orderMultiReqRate = 10 // This is not specified just inputted above
|
|
statsV1ReqRate = 10
|
|
fundingbookReqRate = 15
|
|
lendsReqRate = 30
|
|
|
|
// Rate limit endpoint functionality declaration
|
|
platformStatus request.EndpointLimit = iota
|
|
tickerBatch
|
|
tickerFunction
|
|
tradeRateLimit
|
|
orderbookFunction
|
|
stats
|
|
candle
|
|
configs
|
|
status
|
|
liquid
|
|
leaderBoard
|
|
marketAveragePrice
|
|
fx
|
|
|
|
// Bitfinex rate limits - Authenticated
|
|
// Wallets -
|
|
accountWalletBalance
|
|
accountWalletHistory
|
|
// Orders -
|
|
retrieveOrder
|
|
submitOrder
|
|
updateOrder
|
|
cancelOrder
|
|
orderBatch
|
|
cancelBatch
|
|
orderHistory
|
|
getOrderTrades
|
|
getTrades
|
|
getLedgers
|
|
// Positions -
|
|
getAccountMarginInfo
|
|
getActivePositions
|
|
claimPosition
|
|
getPositionHistory
|
|
getPositionAudit
|
|
updateCollateralOnPosition
|
|
// Margin funding -
|
|
getActiveFundingOffers
|
|
submitFundingOffer
|
|
cancelFundingOffer
|
|
cancelAllFundingOffer
|
|
closeFunding
|
|
fundingAutoRenew
|
|
keepFunding
|
|
getOffersHistory
|
|
getFundingLoans
|
|
getFundingLoanHistory
|
|
getFundingCredits
|
|
getFundingCreditsHistory
|
|
getFundingTrades
|
|
getFundingInfo
|
|
// Account actions
|
|
getUserInfo
|
|
transferBetweenWallets
|
|
getDepositAddress
|
|
withdrawal
|
|
getMovements
|
|
getAlertList
|
|
setPriceAlert
|
|
deletePriceAlert
|
|
getBalanceForOrdersOffers
|
|
userSettingsWrite
|
|
userSettingsRead
|
|
userSettingsDelete
|
|
// Account V1 endpoints
|
|
getAccountFees
|
|
getWithdrawalFees
|
|
getAccountSummary
|
|
newDepositAddress
|
|
getKeyPermissions
|
|
getMarginInfo
|
|
getAccountBalance
|
|
walletTransfer
|
|
withdrawV1
|
|
orderV1
|
|
orderMulti
|
|
statsV1
|
|
fundingbook
|
|
lends
|
|
)
|
|
|
|
// GetRateLimit returns the rate limit for the exchange
|
|
func GetRateLimit() request.RateLimitDefinitions {
|
|
return request.RateLimitDefinitions{
|
|
platformStatus: request.NewRateLimitWithWeight(requestLimitInterval, platformStatusReqRate, 1),
|
|
tickerBatch: request.NewRateLimitWithWeight(requestLimitInterval, tickerBatchReqRate, 1),
|
|
tickerFunction: request.NewRateLimitWithWeight(requestLimitInterval, tickerReqRate, 1),
|
|
tradeRateLimit: request.NewRateLimitWithWeight(requestLimitInterval, tradeReqRate, 1),
|
|
orderbookFunction: request.NewRateLimitWithWeight(requestLimitInterval, orderbookReqRate, 1),
|
|
stats: request.NewRateLimitWithWeight(requestLimitInterval, statsReqRate, 1),
|
|
candle: request.NewRateLimitWithWeight(requestLimitInterval, candleReqRate, 1),
|
|
configs: request.NewRateLimitWithWeight(requestLimitInterval, configsReqRate, 1),
|
|
status: request.NewRateLimitWithWeight(requestLimitInterval, statusReqRate, 1),
|
|
liquid: request.NewRateLimitWithWeight(requestLimitInterval, liquidReqRate, 1),
|
|
leaderBoard: request.NewRateLimitWithWeight(requestLimitInterval, leaderBoardReqRate, 1),
|
|
marketAveragePrice: request.NewRateLimitWithWeight(requestLimitInterval, marketAveragePriceReqRate, 1),
|
|
fx: request.NewRateLimitWithWeight(requestLimitInterval, fxReqRate, 1),
|
|
accountWalletBalance: request.NewRateLimitWithWeight(requestLimitInterval, accountWalletBalanceReqRate, 1),
|
|
accountWalletHistory: request.NewRateLimitWithWeight(requestLimitInterval, accountWalletHistoryReqRate, 1),
|
|
// Orders -
|
|
retrieveOrder: request.NewRateLimitWithWeight(requestLimitInterval, retrieveOrderReqRate, 1),
|
|
submitOrder: request.NewRateLimitWithWeight(requestLimitInterval, submitOrderReqRate, 1),
|
|
updateOrder: request.NewRateLimitWithWeight(requestLimitInterval, updateOrderReqRate, 1),
|
|
cancelOrder: request.NewRateLimitWithWeight(requestLimitInterval, cancelOrderReqRate, 1),
|
|
orderBatch: request.NewRateLimitWithWeight(requestLimitInterval, orderBatchReqRate, 1),
|
|
cancelBatch: request.NewRateLimitWithWeight(requestLimitInterval, cancelBatchReqRate, 1),
|
|
orderHistory: request.NewRateLimitWithWeight(requestLimitInterval, orderHistoryReqRate, 1),
|
|
getOrderTrades: request.NewRateLimitWithWeight(requestLimitInterval, getOrderTradesReqRate, 1),
|
|
getTrades: request.NewRateLimitWithWeight(requestLimitInterval, getTradesReqRate, 1),
|
|
getLedgers: request.NewRateLimitWithWeight(requestLimitInterval, getLedgersReqRate, 1),
|
|
// Positions -
|
|
getAccountMarginInfo: request.NewRateLimitWithWeight(requestLimitInterval, getAccountMarginInfoReqRate, 1),
|
|
getActivePositions: request.NewRateLimitWithWeight(requestLimitInterval, getActivePositionsReqRate, 1),
|
|
claimPosition: request.NewRateLimitWithWeight(requestLimitInterval, claimPositionReqRate, 1),
|
|
getPositionHistory: request.NewRateLimitWithWeight(requestLimitInterval, getPositionAuditReqRate, 1),
|
|
getPositionAudit: request.NewRateLimitWithWeight(requestLimitInterval, getPositionAuditReqRate, 1),
|
|
updateCollateralOnPosition: request.NewRateLimitWithWeight(requestLimitInterval, updateCollateralOnPositionReqRate, 1),
|
|
// Margin funding -
|
|
getActiveFundingOffers: request.NewRateLimitWithWeight(requestLimitInterval, getActiveFundingOffersReqRate, 1),
|
|
submitFundingOffer: request.NewRateLimitWithWeight(requestLimitInterval, submitFundingOfferReqRate, 1),
|
|
cancelFundingOffer: request.NewRateLimitWithWeight(requestLimitInterval, cancelFundingOfferReqRate, 1),
|
|
cancelAllFundingOffer: request.NewRateLimitWithWeight(requestLimitInterval, cancelAllFundingOfferReqRate, 1),
|
|
closeFunding: request.NewRateLimitWithWeight(requestLimitInterval, closeFundingReqRate, 1),
|
|
fundingAutoRenew: request.NewRateLimitWithWeight(requestLimitInterval, fundingAutoRenewReqRate, 1),
|
|
keepFunding: request.NewRateLimitWithWeight(requestLimitInterval, keepFundingReqRate, 1),
|
|
getOffersHistory: request.NewRateLimitWithWeight(requestLimitInterval, getOffersHistoryReqRate, 1),
|
|
getFundingLoans: request.NewRateLimitWithWeight(requestLimitInterval, getOffersHistoryReqRate, 1),
|
|
getFundingLoanHistory: request.NewRateLimitWithWeight(requestLimitInterval, getFundingLoanHistoryReqRate, 1),
|
|
getFundingCredits: request.NewRateLimitWithWeight(requestLimitInterval, getFundingCreditsReqRate, 1),
|
|
getFundingCreditsHistory: request.NewRateLimitWithWeight(requestLimitInterval, getFundingCreditsHistoryReqRate, 1),
|
|
getFundingTrades: request.NewRateLimitWithWeight(requestLimitInterval, getFundingTradesReqRate, 1),
|
|
getFundingInfo: request.NewRateLimitWithWeight(requestLimitInterval, getFundingInfoReqRate, 1),
|
|
// Account actions
|
|
getUserInfo: request.NewRateLimitWithWeight(requestLimitInterval, getUserInfoReqRate, 1),
|
|
transferBetweenWallets: request.NewRateLimitWithWeight(requestLimitInterval, transferBetweenWalletsReqRate, 1),
|
|
getDepositAddress: request.NewRateLimitWithWeight(requestLimitInterval, getDepositAddressReqRate, 1),
|
|
withdrawal: request.NewRateLimitWithWeight(requestLimitInterval, withdrawalReqRate, 1),
|
|
getMovements: request.NewRateLimitWithWeight(requestLimitInterval, getMovementsReqRate, 1),
|
|
getAlertList: request.NewRateLimitWithWeight(requestLimitInterval, getAlertListReqRate, 1),
|
|
setPriceAlert: request.NewRateLimitWithWeight(requestLimitInterval, setPriceAlertReqRate, 1),
|
|
deletePriceAlert: request.NewRateLimitWithWeight(requestLimitInterval, deletePriceAlertReqRate, 1),
|
|
getBalanceForOrdersOffers: request.NewRateLimitWithWeight(requestLimitInterval, getBalanceForOrdersOffersReqRate, 1),
|
|
userSettingsWrite: request.NewRateLimitWithWeight(requestLimitInterval, userSettingsWriteReqRate, 1),
|
|
userSettingsRead: request.NewRateLimitWithWeight(requestLimitInterval, userSettingsReadReqRate, 1),
|
|
userSettingsDelete: request.NewRateLimitWithWeight(requestLimitInterval, userSettingsDeleteReqRate, 1),
|
|
// Account V1 endpoints
|
|
getAccountFees: request.NewRateLimitWithWeight(requestLimitInterval, getAccountFeesReqRate, 1),
|
|
getWithdrawalFees: request.NewRateLimitWithWeight(requestLimitInterval, getWithdrawalFeesReqRate, 1),
|
|
getAccountSummary: request.NewRateLimitWithWeight(requestLimitInterval, getAccountSummaryReqRate, 1),
|
|
newDepositAddress: request.NewRateLimitWithWeight(requestLimitInterval, newDepositAddressReqRate, 1),
|
|
getKeyPermissions: request.NewRateLimitWithWeight(requestLimitInterval, getKeyPermissionsReqRate, 1),
|
|
getMarginInfo: request.NewRateLimitWithWeight(requestLimitInterval, getMarginInfoReqRate, 1),
|
|
getAccountBalance: request.NewRateLimitWithWeight(requestLimitInterval, getAccountBalanceReqRate, 1),
|
|
walletTransfer: request.NewRateLimitWithWeight(requestLimitInterval, walletTransferReqRate, 1),
|
|
withdrawV1: request.NewRateLimitWithWeight(requestLimitInterval, withdrawV1ReqRate, 1),
|
|
orderV1: request.NewRateLimitWithWeight(requestLimitInterval, orderV1ReqRate, 1),
|
|
orderMulti: request.NewRateLimitWithWeight(requestLimitInterval, orderMultiReqRate, 1),
|
|
statsV1: request.NewRateLimitWithWeight(requestLimitInterval, statsV1ReqRate, 1),
|
|
fundingbook: request.NewRateLimitWithWeight(requestLimitInterval, fundingbookReqRate, 1),
|
|
lends: request.NewRateLimitWithWeight(requestLimitInterval, lendsReqRate, 1),
|
|
}
|
|
}
|