Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 30 additions & 27 deletions engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -707,17 +707,13 @@ func (bot *Engine) LoadExchange(name string) error {
return err
}

if bot.Settings.EnableAllPairs &&
exchCfg.CurrencyPairs != nil {
assets := exchCfg.CurrencyPairs.GetAssetTypes(false)
for x := range assets {
var pairs currency.Pairs
pairs, err = exchCfg.CurrencyPairs.GetPairs(assets[x], false)
if bot.Settings.EnableAllPairs && exchCfg.CurrencyPairs != nil {
for _, a := range exchCfg.CurrencyPairs.GetAssetTypes(false) {
pairs, err := exchCfg.CurrencyPairs.GetPairs(a, false)
if err != nil {
return err
}
err = exchCfg.CurrencyPairs.StorePairs(assets[x], pairs, true)
if err != nil {
if err := exchCfg.CurrencyPairs.StorePairs(a, pairs, true); err != nil {
return err
}
}
Expand All @@ -727,18 +723,14 @@ func (bot *Engine) LoadExchange(name string) error {
exchCfg.Verbose = true
}
if exchCfg.Features != nil {
if bot.Settings.EnableExchangeWebsocketSupport &&
exchCfg.Features.Supports.Websocket {
if bot.Settings.EnableExchangeWebsocketSupport && exchCfg.Features.Supports.Websocket {
exchCfg.Features.Enabled.Websocket = true
}
if bot.Settings.EnableExchangeAutoPairUpdates &&
exchCfg.Features.Supports.RESTCapabilities.AutoPairUpdates {
if bot.Settings.EnableExchangeAutoPairUpdates && exchCfg.Features.Supports.RESTCapabilities.AutoPairUpdates {
exchCfg.Features.Enabled.AutoPairUpdates = true
}
if bot.Settings.DisableExchangeAutoPairUpdates {
if exchCfg.Features.Supports.RESTCapabilities.AutoPairUpdates {
exchCfg.Features.Enabled.AutoPairUpdates = false
}
if bot.Settings.DisableExchangeAutoPairUpdates && exchCfg.Features.Supports.RESTCapabilities.AutoPairUpdates {
exchCfg.Features.Enabled.AutoPairUpdates = false
}
}
if bot.Settings.HTTPUserAgent != "" {
Expand All @@ -755,8 +747,7 @@ func (bot *Engine) LoadExchange(name string) error {
}

if !bot.Settings.EnableExchangeHTTPRateLimiter {
err = exch.DisableRateLimiter()
if err != nil {
if err := exch.DisableRateLimiter(); err != nil {
gctlog.Errorf(gctlog.ExchangeSys, "%s error disabling rate limiter: %v", exch.GetName(), err)
} else {
gctlog.Warnf(gctlog.ExchangeSys, "%s rate limiting has been turned off", exch.GetName())
Expand All @@ -767,26 +758,38 @@ func (bot *Engine) LoadExchange(name string) error {
exchCfg.Name = exch.GetName()

exchCfg.Enabled = true
err = exch.Setup(exchCfg)
if err != nil {
if err := exch.Setup(exchCfg); err != nil {
exchCfg.Enabled = false
return err
}

err = bot.ExchangeManager.Add(exch)
if err != nil {
if err := bot.ExchangeManager.Add(exch); err != nil {
return err
}

b := exch.GetBase()
if b.API.AuthenticatedSupport || b.API.AuthenticatedWebsocketSupport {
err = exch.ValidateAPICredentials(context.TODO(), asset.Spot)
if err != nil {
gctlog.Warnf(gctlog.ExchangeSys, "%s: Error validating credentials: %v", b.Name, err)
enabledAssets := b.CurrencyPairs.GetAssetTypes(true)
var preferredAsset asset.Item
switch {
case enabledAssets.Contains(asset.Spot): // prioritise validating credentials with spot due to wide usage across GCT
preferredAsset = asset.Spot
default:
for _, a := range enabledAssets { // second priority to futures if spot isn't available
if a.IsFutures() {
preferredAsset = a
break
}
}
if preferredAsset == 0 {
preferredAsset = enabledAssets[0] // last resort pick first available
}
}

if err := exch.ValidateAPICredentials(context.TODO(), preferredAsset); err != nil {
gctlog.Warnf(gctlog.ExchangeSys, "%s: Error validating credentials: %v for %s", b.Name, err, preferredAsset)
b.API.AuthenticatedSupport = false
b.API.AuthenticatedWebsocketSupport = false
exchCfg.API.AuthenticatedSupport = false
exchCfg.API.AuthenticatedWebsocketSupport = false
if b.Websocket != nil {
b.Websocket.SetCanUseAuthenticatedEndpoints(false)
}
Expand Down
7 changes: 3 additions & 4 deletions exchanges/kucoin/kucoin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2309,12 +2309,11 @@ func TestGetFeeByType(t *testing.T) {
assert.NotNil(t, result)
}

func TestValidateCredentials(t *testing.T) {
func TestValidateAPICredentials(t *testing.T) {
t.Parallel()
sharedtestvalues.SkipTestIfCredentialsUnset(t, e)
assetTypes := e.CurrencyPairs.GetAssetTypes(true)
for _, at := range assetTypes {
err := e.ValidateCredentials(t.Context(), at)
for _, at := range e.CurrencyPairs.GetAssetTypes(true) {
err := e.ValidateAPICredentials(t.Context(), at)
assert.NoError(t, err)
}
}
Expand Down
10 changes: 0 additions & 10 deletions exchanges/kucoin/kucoin_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -1656,16 +1656,6 @@ func (e *Exchange) GetFeeByType(ctx context.Context, feeBuilder *exchange.FeeBui
}
}

// ValidateCredentials validates current credentials used for wrapper
func (e *Exchange) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
err := e.CurrencyPairs.IsAssetEnabled(assetType)
if err != nil {
return err
}
_, err = e.UpdateAccountBalances(ctx, assetType)
return e.CheckTransientError(err)
}

// GetHistoricCandles returns candles between a time period for a set time interval
func (e *Exchange) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := e.GetKlineRequest(pair, a, interval, start, end, false)
Expand Down
Loading