Files
gocryptotrader/exchanges/bitfinex/ratelimit.go
Ryan O'Hara-Reid f6a95da536 exchanges/request: abstract and consolidate rate limiting code to request package (#1477)
* 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>
2024-06-03 11:57:31 +10:00

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),
}
}