mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-17 07:26:48 +00:00
* Initial rework of rework of requester - WIP * Implementing and checking rate limits - WIP * implemented coinbene rate limiting shenanigans * add in remaining WIP * fixy * use authenticated rate limit * drop ceiling as this can be done with a counter later * add functionality to struct * purge config options for rate limiting so as to keep things minimal * prepare futures and swap rate limiting for implementation * Address linter issues * Addressed nits, fixed race * fix linter issue * remove global var as this was only setting when newrequester was called * moved rate limit functionality into its own file * Update Bitfinex with correct rate limit and test endpoints (WIP) * finish off bitfinex adjustments * fixes * fix linter issues * slowed rate for coinbasepro * drop rate limit for huobi as the doc times have intermittent 429 issues. * Set MACOSX_DEPLOYMENT_TARGET to remove linking warning * Addr Thrasher nits * Addr glorious nits * unexport do request function * fixed nitorinos * Fixed something I missed * move disabled rate limiter into loadexchange and use interface functionality * Add temp quick fix
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package huobi
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
const (
|
|
// Huobi rate limits per API Key
|
|
huobiSpotRateInterval = time.Second * 1
|
|
huobiSpotRequestRate = 7
|
|
|
|
huobiFuturesRateInterval = time.Second * 3
|
|
huobiFuturesAuthRequestRate = 30
|
|
// Non market-request public interface rate
|
|
huobiFuturesUnAuthRequestRate = 60
|
|
huobiFuturesTransferRateInterval = time.Second * 3
|
|
huobiFuturesTransferReqRate = 10
|
|
|
|
huobiSwapRateInterval = time.Second * 3
|
|
huobiSwapAuthRequestRate = 30
|
|
huobiSwapUnauthRequestRate = 60
|
|
|
|
huobiFuturesAuth request.EndpointLimit = iota
|
|
huobiFuturesUnAuth
|
|
huobiFuturesTransfer
|
|
huobiSwapAuth
|
|
huobiSwapUnauth
|
|
)
|
|
|
|
// RateLimit implements the request.Limiter interface
|
|
type RateLimit struct {
|
|
Spot *rate.Limiter
|
|
FuturesAuth *rate.Limiter
|
|
FuturesUnauth *rate.Limiter
|
|
SwapAuth *rate.Limiter
|
|
SwapUnauth *rate.Limiter
|
|
FuturesXfer *rate.Limiter
|
|
}
|
|
|
|
// Limit limits outbound requests
|
|
func (r *RateLimit) Limit(f request.EndpointLimit) error {
|
|
switch f {
|
|
// TODO: Add futures and swap functionality
|
|
case huobiFuturesAuth:
|
|
time.Sleep(r.FuturesAuth.Reserve().Delay())
|
|
case huobiFuturesUnAuth:
|
|
time.Sleep(r.FuturesUnauth.Reserve().Delay())
|
|
case huobiFuturesTransfer:
|
|
time.Sleep(r.FuturesXfer.Reserve().Delay())
|
|
case huobiSwapAuth:
|
|
time.Sleep(r.SwapAuth.Reserve().Delay())
|
|
case huobiSwapUnauth:
|
|
time.Sleep(r.SwapUnauth.Reserve().Delay())
|
|
default:
|
|
// Spot calls
|
|
time.Sleep(r.Spot.Reserve().Delay())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// SetRateLimit returns the rate limit for the exchange
|
|
func SetRateLimit() *RateLimit {
|
|
return &RateLimit{
|
|
Spot: request.NewRateLimit(huobiSpotRateInterval, huobiSpotRequestRate),
|
|
FuturesAuth: request.NewRateLimit(huobiFuturesRateInterval, huobiFuturesAuthRequestRate),
|
|
FuturesUnauth: request.NewRateLimit(huobiFuturesRateInterval, huobiFuturesUnAuthRequestRate),
|
|
SwapAuth: request.NewRateLimit(huobiSwapRateInterval, huobiSwapAuthRequestRate),
|
|
SwapUnauth: request.NewRateLimit(huobiSwapRateInterval, huobiSwapUnauthRequestRate),
|
|
FuturesXfer: request.NewRateLimit(huobiFuturesTransferRateInterval, huobiFuturesTransferReqRate),
|
|
}
|
|
}
|