mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 15:09:42 +00:00
stream/websocket: Consolidate fields by using exchange config pointer (#809)
* stream: add exchange config pointer to setup WebsocketSetup struct to reduce and consolidate setting of variables. * config: reduce stutter * config: reduce minor stutter * glorious: nits addr. * Update exchanges/stream/websocket.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * websocket: implement fix * engine/helpers: fix test * exchanges: fix after merge issues * exchange_template: fix output Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -51,7 +51,7 @@ func TestMain(m *testing.M) {
|
||||
func newBotWithExchange() *engine.Engine {
|
||||
bot := &engine.Engine{
|
||||
Config: &gctconfig.Config{
|
||||
Exchanges: []gctconfig.ExchangeConfig{
|
||||
Exchanges: []gctconfig.Exchange{
|
||||
{
|
||||
Name: testExchange,
|
||||
Enabled: true,
|
||||
|
||||
@@ -30,10 +30,10 @@ func main() {
|
||||
wg.Wait()
|
||||
log.Println("Done.")
|
||||
|
||||
var cfgs []config.ExchangeConfig
|
||||
var cfgs []config.Exchange
|
||||
exchanges := engine.Bot.GetExchanges()
|
||||
for x := range exchanges {
|
||||
var cfg *config.ExchangeConfig
|
||||
var cfg *config.Exchange
|
||||
cfg, err = exchanges[x].GetDefaultConfig()
|
||||
if err != nil {
|
||||
log.Printf("Failed to get exchanges default config. Err: %s", err)
|
||||
|
||||
@@ -93,7 +93,7 @@ func main() {
|
||||
exchangeDirectory := filepath.Join(targetPath, exch.Name)
|
||||
configTestFile := config.GetConfig()
|
||||
|
||||
var newConfig *config.ExchangeConfig
|
||||
var newConfig *config.Exchange
|
||||
newConfig, err = makeExchange(exchangeDirectory, configTestFile, &exch)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -122,7 +122,7 @@ func checkExchangeName(exchName string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func makeExchange(exchangeDirectory string, configTestFile *config.Config, exch *exchange) (*config.ExchangeConfig, error) {
|
||||
func makeExchange(exchangeDirectory string, configTestFile *config.Config, exch *exchange) (*config.Exchange, error) {
|
||||
err := configTestFile.LoadConfig(exchangeConfigPath, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -147,7 +147,7 @@ func makeExchange(exchangeDirectory string, configTestFile *config.Config, exch
|
||||
|
||||
exch.CapitalName = strings.Title(exch.Name)
|
||||
exch.Variable = exch.Name[0:2]
|
||||
newExchConfig := &config.ExchangeConfig{}
|
||||
newExchConfig := &config.Exchange{}
|
||||
newExchConfig.Name = exch.CapitalName
|
||||
newExchConfig.Enabled = true
|
||||
newExchConfig.API.Credentials.Key = "Key"
|
||||
@@ -229,7 +229,7 @@ func makeExchange(exchangeDirectory string, configTestFile *config.Config, exch
|
||||
return newExchConfig, nil
|
||||
}
|
||||
|
||||
func saveConfig(exchangeDirectory string, configTestFile *config.Config, newExchConfig *config.ExchangeConfig) error {
|
||||
func saveConfig(exchangeDirectory string, configTestFile *config.Config, newExchConfig *config.Exchange) error {
|
||||
cmd := exec.Command("go", "fmt")
|
||||
cmd.Dir = exchangeDirectory
|
||||
out, err := cmd.Output()
|
||||
|
||||
@@ -3,6 +3,7 @@ package {{.Name}}
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/common"
|
||||
@@ -11,6 +12,7 @@ import (
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/account"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/deposit"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
@@ -24,9 +26,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig() (*config.Exchange, error) {
|
||||
{{.Variable}}.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = {{.Variable}}.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = {{.Variable}}.BaseCurrencies
|
||||
@@ -34,7 +36,7 @@ func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig() (*config.ExchangeConfi
|
||||
{{.Variable}}.SetupDefaults(exchCfg)
|
||||
|
||||
if {{.Variable}}.Features.Supports.RESTCapabilities.AutoPairUpdates {
|
||||
err := {{.Variable}}.UpdateTradablePairs(true)
|
||||
err := {{.Variable}}.UpdateTradablePairs(context.TODO(), true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -126,7 +128,7 @@ func ({{.Variable}} *{{.CapitalName}}) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.ExchangeConfig) error {
|
||||
func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
{{.Variable}}.SetEnabled(false)
|
||||
return nil
|
||||
@@ -144,17 +146,13 @@ func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.ExchangeConfig) error
|
||||
|
||||
err = {{.Variable}}.Websocket.Setup(
|
||||
&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: {{.Name}}WSAPIURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningEndpoint,
|
||||
Connector: {{.Variable}}.WsConnect,
|
||||
Subscriber: {{.Variable}}.Subscribe,
|
||||
UnSubscriber: {{.Variable}}.Unsubscribe,
|
||||
Features: &{{.Variable}}.Features.Supports.WebsocketCapabilities,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: {{.Name}}WSAPIURL,
|
||||
RunningURL: wsRunningEndpoint,
|
||||
Connector: {{.Variable}}.WsConnect,
|
||||
Subscriber: {{.Variable}}.Subscribe,
|
||||
UnSubscriber: {{.Variable}}.Unsubscribe,
|
||||
Features: &{{.Variable}}.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -168,15 +166,6 @@ func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.ExchangeConfig) error
|
||||
ResponseCheckTimeout: exch.WebsocketResponseCheckTimeout,
|
||||
ResponseMaxLimit: exch.WebsocketResponseMaxLimit,
|
||||
}
|
||||
|
||||
// NOTE: PLEASE ENSURE YOU SET THE ORDERBOOK BUFFER SETTINGS CORRECTLY
|
||||
{{.Variable}}.Websocket.Orderbook.Setup(
|
||||
exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
exch.Name)
|
||||
*/
|
||||
return nil
|
||||
}
|
||||
@@ -204,7 +193,7 @@ func ({{.Variable}} *{{.CapitalName}}) Run() {
|
||||
return
|
||||
}
|
||||
|
||||
err := {{.Variable}}.UpdateTradablePairs(false)
|
||||
err := {{.Variable}}.UpdateTradablePairs(context.TODO(), false)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s failed to update tradable pairs. Err: %s",
|
||||
@@ -222,7 +211,7 @@ func ({{.Variable}} *{{.CapitalName}}) FetchTradablePairs(ctx context.Context, a
|
||||
// UpdateTradablePairs updates the exchanges available pairs and stores
|
||||
// them in the exchanges config
|
||||
func ({{.Variable}} *{{.CapitalName}}) UpdateTradablePairs(ctx context.Context, forceUpdate bool) error {
|
||||
pairs, err := {{.Variable}}.FetchTradablePairs(asset.Spot)
|
||||
pairs, err := {{.Variable}}.FetchTradablePairs(ctx, asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -263,7 +252,7 @@ func ({{.Variable}} *{{.CapitalName}}) UpdateTicker(ctx context.Context, p curre
|
||||
}
|
||||
|
||||
// UpdateTickers updates all currency pairs of a given asset type
|
||||
func ({{.Variable}} *{{.CapitalName}}) UpdateTickers(assetType asset.Item) error {
|
||||
func ({{.Variable}} *{{.CapitalName}}) UpdateTickers(ctx context.Context, assetType asset.Item) error {
|
||||
// NOTE: EXAMPLE FOR GETTING TICKER PRICE
|
||||
/*
|
||||
tick, err := {{.Variable}}.GetTickers()
|
||||
@@ -301,25 +290,25 @@ func ({{.Variable}} *{{.CapitalName}}) UpdateTickers(assetType asset.Item) error
|
||||
func ({{.Variable}} *{{.CapitalName}}) FetchTicker(ctx context.Context, p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
|
||||
tickerNew, err := ticker.GetTicker({{.Variable}}.Name, p, assetType)
|
||||
if err != nil {
|
||||
return {{.Variable}}.UpdateTicker(p, assetType)
|
||||
return {{.Variable}}.UpdateTicker(ctx, p, assetType)
|
||||
}
|
||||
return tickerNew, nil
|
||||
}
|
||||
|
||||
// FetchOrderbook returns orderbook base on the currency pair
|
||||
func ({{.Variable}} *{{.CapitalName}}) FetchOrderbook(ctx context.Context, c currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
ob, err := orderbook.Get({{.Variable}}.Name, currency, assetType)
|
||||
func ({{.Variable}} *{{.CapitalName}}) FetchOrderbook(ctx context.Context, pair currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
ob, err := orderbook.Get({{.Variable}}.Name, pair, assetType)
|
||||
if err != nil {
|
||||
return {{.Variable}}.UpdateOrderbook(currency, assetType)
|
||||
return {{.Variable}}.UpdateOrderbook(ctx, pair, assetType)
|
||||
}
|
||||
return ob, nil
|
||||
}
|
||||
|
||||
// UpdateOrderbook updates and returns the orderbook for a currency pair
|
||||
func ({{.Variable}} *{{.CapitalName}}) UpdateOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func ({{.Variable}} *{{.CapitalName}}) UpdateOrderbook(ctx context.Context, pair currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
book := &orderbook.Base{
|
||||
Exchange: {{.Variable}}.Name,
|
||||
Pair: p,
|
||||
Pair: pair,
|
||||
Asset: assetType,
|
||||
VerifyOrderbook: {{.Variable}}.CanVerifyOrderbook,
|
||||
}
|
||||
@@ -351,7 +340,7 @@ func ({{.Variable}} *{{.CapitalName}}) UpdateOrderbook(ctx context.Context, p cu
|
||||
return book, err
|
||||
}
|
||||
|
||||
return orderbook.Get({{.Variable}}.Name, p, assetType)
|
||||
return orderbook.Get({{.Variable}}.Name, pair, assetType)
|
||||
}
|
||||
|
||||
// UpdateAccountInfo retrieves balances for all enabled currencies
|
||||
@@ -381,7 +370,7 @@ func ({{.Variable}} *{{.CapitalName}}) GetRecentTrades(ctx context.Context, p cu
|
||||
}
|
||||
|
||||
// GetHistoricTrades returns historic trade data within the timeframe provided
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetHistoricTrades (p currency.Pair, assetType asset.Item, timestampStart, timestampEnd time.Time) ([]trade.Data, error) {
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetHistoricTrades (ctx context.Context, p currency.Pair, assetType asset.Item, timestampStart, timestampEnd time.Time) ([]trade.Data, error) {
|
||||
return nil, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
@@ -396,11 +385,11 @@ func ({{.Variable}} *{{.CapitalName}}) SubmitOrder(ctx context.Context, s *order
|
||||
|
||||
// ModifyOrder will allow of changing orderbook placement and limit to
|
||||
// market conversion
|
||||
func ({{.Variable}} *{{.CapitalName}}) ModifyOrder(action *order.Modify) (string, error) {
|
||||
func ({{.Variable}} *{{.CapitalName}}) ModifyOrder(ctx context.Context, action *order.Modify) (order.Modify, error) {
|
||||
// if err := action.Validate(); err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
return "", common.ErrNotYetImplemented
|
||||
return order.Modify{}, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// CancelOrder cancels an order by its corresponding ID number
|
||||
@@ -430,8 +419,8 @@ func ({{.Variable}} *{{.CapitalName}}) GetOrderInfo(ctx context.Context, orderID
|
||||
}
|
||||
|
||||
// GetDepositAddress returns a deposit address for a specified currency
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetDepositAddress(ctx context.Context, c currency.Code, accountID string) (string, error) {
|
||||
return "", common.ErrNotYetImplemented
|
||||
func ({{.Variable}} *{{.CapitalName}}) GetDepositAddress(ctx context.Context, c currency.Code, accountID string, chain string) (*deposit.Address, error) {
|
||||
return nil, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// WithdrawCryptocurrencyFunds returns a withdrawal ID when a withdrawal is
|
||||
@@ -485,7 +474,7 @@ func ({{.Variable}} *{{.CapitalName}}) GetFeeByType(ctx context.Context, feeBuil
|
||||
|
||||
// ValidateCredentials validates current credentials used for wrapper
|
||||
func ({{.Variable}} *{{.CapitalName}}) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
|
||||
_, err := {{.Variable}}.UpdateAccountInfo(assetType)
|
||||
_, err := {{.Variable}}.UpdateAccountInfo(ctx, assetType)
|
||||
return {{.Variable}}.CheckTransientError(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -734,7 +734,7 @@ func (c *Config) GetCurrencyPairDisplayConfig() *CurrencyPairFormatConfig {
|
||||
}
|
||||
|
||||
// GetAllExchangeConfigs returns all exchange configurations
|
||||
func (c *Config) GetAllExchangeConfigs() []ExchangeConfig {
|
||||
func (c *Config) GetAllExchangeConfigs() []Exchange {
|
||||
m.Lock()
|
||||
configs := c.Exchanges
|
||||
m.Unlock()
|
||||
@@ -742,7 +742,7 @@ func (c *Config) GetAllExchangeConfigs() []ExchangeConfig {
|
||||
}
|
||||
|
||||
// GetExchangeConfig returns exchange configurations by its indivdual name
|
||||
func (c *Config) GetExchangeConfig(name string) (*ExchangeConfig, error) {
|
||||
func (c *Config) GetExchangeConfig(name string) (*Exchange, error) {
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
for i := range c.Exchanges {
|
||||
@@ -786,7 +786,7 @@ func (c *Config) GetPrimaryForexProvider() string {
|
||||
}
|
||||
|
||||
// UpdateExchangeConfig updates exchange configurations
|
||||
func (c *Config) UpdateExchangeConfig(e *ExchangeConfig) error {
|
||||
func (c *Config) UpdateExchangeConfig(e *Exchange) error {
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
for i := range c.Exchanges {
|
||||
@@ -1015,20 +1015,20 @@ func (c *Config) CheckExchangeConfigValues() error {
|
||||
defaultWebsocketTrafficTimeout)
|
||||
c.Exchanges[i].WebsocketTrafficTimeout = defaultWebsocketTrafficTimeout
|
||||
}
|
||||
if c.Exchanges[i].OrderbookConfig.WebsocketBufferLimit <= 0 {
|
||||
if c.Exchanges[i].Orderbook.WebsocketBufferLimit <= 0 {
|
||||
log.Warnf(log.ConfigMgr,
|
||||
"Exchange %s Websocket orderbook buffer limit value not set, defaulting to %v.",
|
||||
c.Exchanges[i].Name,
|
||||
defaultWebsocketOrderbookBufferLimit)
|
||||
c.Exchanges[i].OrderbookConfig.WebsocketBufferLimit = defaultWebsocketOrderbookBufferLimit
|
||||
c.Exchanges[i].Orderbook.WebsocketBufferLimit = defaultWebsocketOrderbookBufferLimit
|
||||
}
|
||||
if c.Exchanges[i].OrderbookConfig.PublishPeriod == nil || c.Exchanges[i].OrderbookConfig.PublishPeriod.Nanoseconds() < 0 {
|
||||
if c.Exchanges[i].Orderbook.PublishPeriod == nil || c.Exchanges[i].Orderbook.PublishPeriod.Nanoseconds() < 0 {
|
||||
log.Warnf(log.ConfigMgr,
|
||||
"Exchange %s Websocket orderbook publish period value not set, defaulting to %v.",
|
||||
c.Exchanges[i].Name,
|
||||
DefaultOrderbookPublishPeriod)
|
||||
publishPeriod := DefaultOrderbookPublishPeriod
|
||||
c.Exchanges[i].OrderbookConfig.PublishPeriod = &publishPeriod
|
||||
c.Exchanges[i].Orderbook.PublishPeriod = &publishPeriod
|
||||
}
|
||||
err := c.CheckPairConsistency(c.Exchanges[i].Name)
|
||||
if err != nil {
|
||||
|
||||
@@ -79,7 +79,7 @@ func TestGetExchangeBankAccounts(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{{
|
||||
Exchanges: []Exchange{{
|
||||
Name: bfx,
|
||||
Enabled: true,
|
||||
BankAccounts: []banking.Account{
|
||||
@@ -140,7 +140,7 @@ func TestCheckBankAccountConfig(t *testing.T) {
|
||||
func TestUpdateExchangeBankAccounts(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Name: bfx,
|
||||
Enabled: true,
|
||||
@@ -273,7 +273,7 @@ func TestCheckClientBankAccounts(t *testing.T) {
|
||||
func TestPurgeExchangeCredentials(t *testing.T) {
|
||||
t.Parallel()
|
||||
var c Config
|
||||
c.Exchanges = []ExchangeConfig{
|
||||
c.Exchanges = []Exchange{
|
||||
{
|
||||
Name: testString,
|
||||
API: APIConfig{
|
||||
@@ -483,7 +483,7 @@ func TestGetExchangeAssetTypes(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
CurrencyPairs: ¤cy.PairsManager{
|
||||
Pairs: map[asset.Item]*currency.PairStore{
|
||||
@@ -520,7 +520,7 @@ func TestSupportsExchangeAssetType(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
CurrencyPairs: ¤cy.PairsManager{
|
||||
Pairs: map[asset.Item]*currency.PairStore{
|
||||
@@ -566,7 +566,7 @@ func TestSetPairs(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
},
|
||||
)
|
||||
@@ -602,7 +602,7 @@ func TestGetCurrencyPairConfig(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
},
|
||||
)
|
||||
@@ -654,7 +654,7 @@ func TestCheckPairConfigFormats(t *testing.T) {
|
||||
}
|
||||
// Test nil pair store
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
},
|
||||
)
|
||||
@@ -754,7 +754,7 @@ func TestCheckPairConsistency(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
},
|
||||
)
|
||||
@@ -903,7 +903,7 @@ func TestSupportsPair(t *testing.T) {
|
||||
t.Parallel()
|
||||
fmt := ¤cy.PairFormat{}
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Name: bfx,
|
||||
Enabled: true,
|
||||
@@ -945,7 +945,7 @@ func TestGetPairFormat(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
},
|
||||
)
|
||||
@@ -1043,7 +1043,7 @@ func TestGetAvailablePairs(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
},
|
||||
@@ -1086,7 +1086,7 @@ func TestGetEnabledPairs(t *testing.T) {
|
||||
}
|
||||
|
||||
c.Exchanges = append(c.Exchanges,
|
||||
ExchangeConfig{
|
||||
Exchange{
|
||||
Name: testFakeExchangeName,
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
},
|
||||
@@ -1126,7 +1126,7 @@ func TestGetEnabledPairs(t *testing.T) {
|
||||
|
||||
func TestGetEnabledExchanges(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{Exchanges: []ExchangeConfig{
|
||||
cfg := &Config{Exchanges: []Exchange{
|
||||
{
|
||||
Name: bfx,
|
||||
Enabled: true,
|
||||
@@ -1143,7 +1143,7 @@ func TestGetEnabledExchanges(t *testing.T) {
|
||||
|
||||
func TestGetDisabledExchanges(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{Exchanges: []ExchangeConfig{
|
||||
cfg := &Config{Exchanges: []Exchange{
|
||||
{
|
||||
Name: bfx,
|
||||
Enabled: true,
|
||||
@@ -1180,7 +1180,7 @@ func TestGetDisabledExchanges(t *testing.T) {
|
||||
|
||||
func TestCountEnabledExchanges(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{Exchanges: []ExchangeConfig{
|
||||
cfg := &Config{Exchanges: []Exchange{
|
||||
{
|
||||
Enabled: true,
|
||||
},
|
||||
@@ -1212,7 +1212,7 @@ func TestGetCurrencyPairDisplayConfig(t *testing.T) {
|
||||
func TestGetAllExchangeConfigs(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{},
|
||||
},
|
||||
}
|
||||
@@ -1224,7 +1224,7 @@ func TestGetAllExchangeConfigs(t *testing.T) {
|
||||
func TestGetExchangeConfig(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Name: bfx,
|
||||
},
|
||||
@@ -1312,14 +1312,14 @@ func TestUpdateExchangeConfig(t *testing.T) {
|
||||
t.Parallel()
|
||||
ok := "OKEX"
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Name: ok,
|
||||
API: APIConfig{Credentials: APICredentialsConfig{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
e := &ExchangeConfig{}
|
||||
e := &Exchange{}
|
||||
err := cfg.UpdateExchangeConfig(e)
|
||||
if err == nil {
|
||||
t.Error("Expected error from non-existent exchange")
|
||||
@@ -1525,7 +1525,7 @@ func TestCheckExchangeConfigValues(t *testing.T) {
|
||||
// Test websocket and HTTP timeout values
|
||||
cfg.Exchanges[0].WebsocketResponseMaxLimit = 0
|
||||
cfg.Exchanges[0].WebsocketResponseCheckTimeout = 0
|
||||
cfg.Exchanges[0].OrderbookConfig.WebsocketBufferLimit = 0
|
||||
cfg.Exchanges[0].Orderbook.WebsocketBufferLimit = 0
|
||||
cfg.Exchanges[0].WebsocketTrafficTimeout = 0
|
||||
cfg.Exchanges[0].HTTPTimeout = 0
|
||||
err = cfg.CheckExchangeConfigValues()
|
||||
@@ -1537,7 +1537,7 @@ func TestCheckExchangeConfigValues(t *testing.T) {
|
||||
t.Errorf("expected exchange %s to have updated WebsocketResponseMaxLimit value",
|
||||
cfg.Exchanges[0].Name)
|
||||
}
|
||||
if cfg.Exchanges[0].OrderbookConfig.WebsocketBufferLimit == 0 {
|
||||
if cfg.Exchanges[0].Orderbook.WebsocketBufferLimit == 0 {
|
||||
t.Errorf("expected exchange %s to have updated WebsocketOrderbookBufferLimit value",
|
||||
cfg.Exchanges[0].Name)
|
||||
}
|
||||
@@ -1705,7 +1705,7 @@ func TestRetrieveConfigCurrencyPairs(t *testing.T) {
|
||||
cp1 := currency.NewPair(currency.DOGE, currency.XRP)
|
||||
cp2 := currency.NewPair(currency.DOGE, currency.USD)
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Enabled: true,
|
||||
BaseCurrencies: currency.Currencies{
|
||||
@@ -1911,7 +1911,7 @@ func TestCheckConfig(t *testing.T) {
|
||||
cp1 := currency.NewPair(currency.DOGE, currency.XRP)
|
||||
cp2 := currency.NewPair(currency.DOGE, currency.USD)
|
||||
cfg := &Config{
|
||||
Exchanges: []ExchangeConfig{
|
||||
Exchanges: []Exchange{
|
||||
{
|
||||
Name: testFakeExchangeName,
|
||||
Enabled: true,
|
||||
@@ -2187,7 +2187,7 @@ func TestRemoveExchange(t *testing.T) {
|
||||
t.Parallel()
|
||||
var c Config
|
||||
const testExchangeName = "0xBAAAAAAD"
|
||||
c.Exchanges = append(c.Exchanges, ExchangeConfig{
|
||||
c.Exchanges = append(c.Exchanges, Exchange{
|
||||
Name: testExchangeName,
|
||||
})
|
||||
_, err := c.GetExchangeConfig(testExchangeName)
|
||||
|
||||
@@ -90,7 +90,7 @@ type Config struct {
|
||||
Communications base.CommunicationsConfig `json:"communications"`
|
||||
RemoteControl RemoteControlConfig `json:"remoteControl"`
|
||||
Portfolio portfolio.Base `json:"portfolioAddresses"`
|
||||
Exchanges []ExchangeConfig `json:"exchanges"`
|
||||
Exchanges []Exchange `json:"exchanges"`
|
||||
BankAccounts []banking.Account `json:"bankAccounts"`
|
||||
|
||||
// Deprecated config settings, will be removed at a future date
|
||||
@@ -128,8 +128,8 @@ type ConnectionMonitorConfig struct {
|
||||
CheckInterval time.Duration `json:"checkInterval"`
|
||||
}
|
||||
|
||||
// ExchangeConfig holds all the information needed for each enabled Exchange.
|
||||
type ExchangeConfig struct {
|
||||
// Exchange holds all the information needed for each enabled Exchange.
|
||||
type Exchange struct {
|
||||
Name string `json:"name"`
|
||||
Enabled bool `json:"enabled"`
|
||||
Verbose bool `json:"verbose"`
|
||||
@@ -146,7 +146,7 @@ type ExchangeConfig struct {
|
||||
API APIConfig `json:"api"`
|
||||
Features *FeaturesConfig `json:"features"`
|
||||
BankAccounts []banking.Account `json:"bankAccounts,omitempty"`
|
||||
OrderbookConfig `json:"orderbook"`
|
||||
Orderbook Orderbook `json:"orderbook"`
|
||||
|
||||
// Deprecated settings which will be removed in a future update
|
||||
AvailablePairs *currency.Pairs `json:"availablePairs,omitempty"`
|
||||
@@ -332,8 +332,8 @@ type APIConfig struct {
|
||||
Endpoints map[string]string `json:"urlEndpoints"`
|
||||
}
|
||||
|
||||
// OrderbookConfig stores the orderbook configuration variables
|
||||
type OrderbookConfig struct {
|
||||
// Orderbook stores the orderbook configuration variables
|
||||
type Orderbook struct {
|
||||
VerificationBypass bool `json:"verificationBypass"`
|
||||
WebsocketBufferLimit int `json:"websocketBufferLimit"`
|
||||
WebsocketBufferEnabled bool `json:"websocketBufferEnabled"`
|
||||
|
||||
@@ -1095,7 +1095,7 @@ Add websocket functionality if supported to Setup:
|
||||
|
||||
```go
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (f *FTX) Setup(exch *config.ExchangeConfig) error {
|
||||
func (f *FTX) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
f.SetEnabled(false)
|
||||
return nil
|
||||
@@ -1108,23 +1108,27 @@ func (f *FTX) Setup(exch *config.ExchangeConfig) error {
|
||||
|
||||
// Websocket details setup below
|
||||
err = f.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: ftxWSURL, // Default ws endpoint so we can roll back via CLI if needed.
|
||||
ExchangeName: exch.Name, // Sets websocket name to the exchange name.
|
||||
RunningURL: exch.API.Endpoints.WebsocketURL,
|
||||
Connector: f.WsConnect, // Connector function outlined above.
|
||||
Subscriber: f.Subscribe, // Subscriber function outlined above.
|
||||
UnSubscriber: f.Unsubscribe, // Unsubscriber function outlined above.
|
||||
GenerateSubscriptions: f.GenerateDefaultSubscriptions, // GenerateDefaultSubscriptions function outlined above.
|
||||
Features: &f.Features.Supports.WebsocketCapabilities, // Defines the capabilities of the websocket outlined in supported features struct. This allows the websocket connection to be flushed appropriately if we have a pair/asset enable/disable change. This is outlined below.
|
||||
ExchangeConfig: exch,
|
||||
// DefaultURL defines the default endpoint in the event a rollback is
|
||||
// needed via gctcli.
|
||||
DefaultURL: ftxWSURL,
|
||||
RunningURL: exch.API.Endpoints.WebsocketURL,
|
||||
// Connector function outlined above.
|
||||
Connector: f.WsConnect,
|
||||
// Subscriber function outlined above.
|
||||
Subscriber: f.Subscribe,
|
||||
// Unsubscriber function outlined above.
|
||||
UnSubscriber: f.Unsubscribe,
|
||||
// GenerateDefaultSubscriptions function outlined above.
|
||||
GenerateSubscriptions: f.GenerateDefaultSubscriptions,
|
||||
// Defines the capabilities of the websocket outlined in supported
|
||||
// features struct. This allows the websocket connection to be flushed
|
||||
// appropriately if we have a pair/asset enable/disable change. This is
|
||||
// outlined below.
|
||||
Features: &f.Features.Supports.WebsocketCapabilities,
|
||||
|
||||
// Orderbook buffer specific variables for processing orderbook updates via websocket feed.
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
// Other orderbook buffer vars:
|
||||
// BufferEnabled bool
|
||||
// Orderbook buffer specific variables for processing orderbook updates
|
||||
// via websocket feed:
|
||||
// SortBuffer bool
|
||||
// SortBufferByUpdateIDs bool
|
||||
// UpdateEntriesByID bool
|
||||
|
||||
@@ -926,7 +926,7 @@ func (bot *Engine) SetupExchanges() error {
|
||||
continue
|
||||
}
|
||||
wg.Add(1)
|
||||
go func(c config.ExchangeConfig) {
|
||||
go func(c config.Exchange) {
|
||||
defer wg.Done()
|
||||
err := bot.LoadExchange(c.Name, &wg)
|
||||
if err != nil {
|
||||
|
||||
@@ -215,7 +215,7 @@ func TestUnloadExchange(t *testing.T) {
|
||||
exch.SetEnabled(true)
|
||||
em.Add(exch)
|
||||
e := &Engine{ExchangeManager: em,
|
||||
Config: &config.Config{Exchanges: []config.ExchangeConfig{{Name: testExchange}}},
|
||||
Config: &config.Config{Exchanges: []config.Exchange{{Name: testExchange}}},
|
||||
}
|
||||
err = e.UnloadExchange("asdf")
|
||||
if !errors.Is(err, config.ErrExchangeNotFound) {
|
||||
@@ -240,7 +240,7 @@ func TestDryRunParamInteraction(t *testing.T) {
|
||||
ExchangeManager: SetupExchangeManager(),
|
||||
Settings: Settings{},
|
||||
Config: &config.Config{
|
||||
Exchanges: []config.ExchangeConfig{
|
||||
Exchanges: []config.Exchange{
|
||||
{
|
||||
Name: testExchange,
|
||||
WebsocketTrafficTimeout: time.Second,
|
||||
|
||||
@@ -60,7 +60,7 @@ func CreateTestBot(t *testing.T) *Engine {
|
||||
}
|
||||
bot := &Engine{
|
||||
ExchangeManager: SetupExchangeManager(),
|
||||
Config: &config.Config{Exchanges: []config.ExchangeConfig{
|
||||
Config: &config.Config{Exchanges: []config.Exchange{
|
||||
{
|
||||
Name: testExchange,
|
||||
Enabled: true,
|
||||
@@ -368,7 +368,7 @@ func TestGetSpecificAvailablePairs(t *testing.T) {
|
||||
},
|
||||
}
|
||||
e.Config = &config.Config{
|
||||
Exchanges: []config.ExchangeConfig{
|
||||
Exchanges: []config.Exchange{
|
||||
{
|
||||
Enabled: true,
|
||||
Name: testExchange,
|
||||
@@ -714,7 +714,7 @@ func TestGetExchangeNamesByCurrency(t *testing.T) {
|
||||
|
||||
e := CreateTestBot(t)
|
||||
bf := "Bitflyer"
|
||||
e.Config.Exchanges = append(e.Config.Exchanges, config.ExchangeConfig{
|
||||
e.Config.Exchanges = append(e.Config.Exchanges, config.Exchange{
|
||||
Enabled: true,
|
||||
Name: bf,
|
||||
CurrencyPairs: ¤cy.PairsManager{Pairs: map[asset.Item]*currency.PairStore{
|
||||
@@ -1063,7 +1063,7 @@ func createDepositEngine(opts *fakeDepositExchangeOpts) *Engine {
|
||||
return &Engine{
|
||||
Settings: Settings{Verbose: true},
|
||||
Config: &config.Config{
|
||||
Exchanges: []config.ExchangeConfig{
|
||||
Exchanges: []config.Exchange{
|
||||
{
|
||||
Name: "fake",
|
||||
Enabled: true,
|
||||
|
||||
@@ -807,7 +807,7 @@ func TestProcessOrders(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
exch.GetBase().Config = &config.ExchangeConfig{
|
||||
exch.GetBase().Config = &config.Exchange{
|
||||
CurrencyPairs: ¤cy.PairsManager{
|
||||
UseGlobalFormat: true,
|
||||
RequestFormat: ¤cy.PairFormat{
|
||||
|
||||
@@ -849,7 +849,7 @@ func TestSetExchangeTradeProcessing(t *testing.T) {
|
||||
}
|
||||
exch.SetDefaults()
|
||||
b := exch.GetBase()
|
||||
b.Config = &config.ExchangeConfig{
|
||||
b.Config = &config.Exchange{
|
||||
Features: &config.FeaturesConfig{Enabled: config.FeaturesEnabledConfig{SaveTradeData: false}},
|
||||
}
|
||||
em.Add(exch)
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config for Alphapoint
|
||||
func (a *Alphapoint) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (a *Alphapoint) GetDefaultConfig() (*config.Exchange, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Binance) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Binance) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -207,7 +207,7 @@ func (b *Binance) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Binance) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Binance) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
return nil
|
||||
}
|
||||
@@ -221,23 +221,16 @@ func (b *Binance) Setup(exch *config.ExchangeConfig) error {
|
||||
return err
|
||||
}
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: binanceDefaultWebsocketURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: ePoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
UnSubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: binanceDefaultWebsocketURL,
|
||||
RunningURL: ePoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
Unsubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bitfinex) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bitfinex) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -183,7 +183,7 @@ func (b *Bitfinex) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Bitfinex) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bitfinex) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -199,22 +199,15 @@ func (b *Bitfinex) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: publicBitfinexWebsocketEndpoint,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
UnSubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
UpdateEntriesByID: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: publicBitfinexWebsocketEndpoint,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
Unsubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
UpdateEntriesByID: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -27,9 +27,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bitflyer) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bitflyer) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -107,7 +107,7 @@ func (b *Bitflyer) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Bitflyer) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bitflyer) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -36,9 +36,9 @@ const wsRateLimitMillisecond = 1000
|
||||
var errNotEnoughPairs = errors.New("at least one currency is required to fetch order history")
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bithumb) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bithumb) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -147,7 +147,7 @@ func (b *Bithumb) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Bithumb) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bithumb) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -167,20 +167,13 @@ func (b *Bithumb) Setup(exch *config.ExchangeConfig) error {
|
||||
return err
|
||||
}
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: wsEndpoint,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: ePoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
GenerateSubscriptions: b.GenerateSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: wsEndpoint,
|
||||
RunningURL: ePoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
GenerateSubscriptions: b.GenerateSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bitmex) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bitmex) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -142,7 +142,7 @@ func (b *Bitmex) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Bitmex) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bitmex) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -159,21 +159,15 @@ func (b *Bitmex) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: bitmexWSURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
UnSubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
UpdateEntriesByID: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: bitmexWSURL,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
Unsubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
UpdateEntriesByID: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -28,9 +28,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bitstamp) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bitstamp) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -146,7 +146,7 @@ func (b *Bitstamp) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets configuration values to bitstamp
|
||||
func (b *Bitstamp) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bitstamp) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -163,21 +163,14 @@ func (b *Bitstamp) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: bitstampWSURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
UnSubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.generateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: bitstampWSURL,
|
||||
RunningURL: wsURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
Unsubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.generateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -29,9 +29,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *Bittrex) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *Bittrex) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -141,7 +141,7 @@ func (b *Bittrex) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *Bittrex) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *Bittrex) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -159,27 +159,20 @@ func (b *Bittrex) Setup(exch *config.ExchangeConfig) error {
|
||||
|
||||
// Websocket details setup below
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: bittrexAPIWSURL, // Default ws endpoint so we can roll back via CLI if needed.
|
||||
ExchangeName: exch.Name, // Sets websocket name to the exchange name.
|
||||
RunningURL: wsRunningEndpoint,
|
||||
Connector: b.WsConnect, // Connector function outlined above.
|
||||
Subscriber: b.Subscribe, // Subscriber function outlined above.
|
||||
UnSubscriber: b.Unsubscribe, // Unsubscriber function outlined above.
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions, // GenerateDefaultSubscriptions function outlined above.
|
||||
Features: &b.Features.Supports.WebsocketCapabilities, // Defines the capabilities of the websocket outlined in supported features struct. This allows the websocket connection to be flushed appropriately if we have a pair/asset enable/disable change. This is outlined below.
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: bittrexAPIWSURL, // Default ws endpoint so we can roll back via CLI if needed.
|
||||
RunningURL: wsRunningEndpoint,
|
||||
Connector: b.WsConnect, // Connector function outlined above.
|
||||
Subscriber: b.Subscribe, // Subscriber function outlined above.
|
||||
Unsubscriber: b.Unsubscribe, // Unsubscriber function outlined above.
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions, // GenerateDefaultSubscriptions function outlined above.
|
||||
Features: &b.Features.Supports.WebsocketCapabilities, // Defines the capabilities of the websocket outlined in supported features struct. This allows the websocket connection to be flushed appropriately if we have a pair/asset enable/disable change. This is outlined below.
|
||||
|
||||
// Orderbook buffer specific variables for processing orderbook updates via websocket feed.
|
||||
// Other orderbook buffer vars:
|
||||
// UpdateEntriesByID bool
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *BTCMarkets) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *BTCMarkets) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -137,7 +137,7 @@ func (b *BTCMarkets) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in an exchange configuration and sets all parameters
|
||||
func (b *BTCMarkets) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *BTCMarkets) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -154,21 +154,14 @@ func (b *BTCMarkets) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: btcMarketsWSURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
GenerateSubscriptions: b.generateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: btcMarketsWSURL,
|
||||
RunningURL: wsURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
GenerateSubscriptions: b.generateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (b *BTSE) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (b *BTSE) GetDefaultConfig() (*config.Exchange, error) {
|
||||
b.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = b.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = b.BaseCurrencies
|
||||
@@ -168,7 +168,7 @@ func (b *BTSE) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (b *BTSE) Setup(exch *config.ExchangeConfig) error {
|
||||
func (b *BTSE) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
b.SetEnabled(false)
|
||||
return nil
|
||||
@@ -185,21 +185,14 @@ func (b *BTSE) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: btseWebsocket,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
UnSubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: btseWebsocket,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: b.WsConnect,
|
||||
Subscriber: b.Subscribe,
|
||||
Unsubscriber: b.Unsubscribe,
|
||||
GenerateSubscriptions: b.GenerateDefaultSubscriptions,
|
||||
Features: &b.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (c *CoinbasePro) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (c *CoinbasePro) GetDefaultConfig() (*config.Exchange, error) {
|
||||
c.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = c.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = c.BaseCurrencies
|
||||
@@ -149,7 +149,7 @@ func (c *CoinbasePro) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup initialises the exchange parameters with the current configuration
|
||||
func (c *CoinbasePro) Setup(exch *config.ExchangeConfig) error {
|
||||
func (c *CoinbasePro) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
c.SetEnabled(false)
|
||||
return nil
|
||||
@@ -166,22 +166,15 @@ func (c *CoinbasePro) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = c.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: coinbaseproWebsocketURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
UnSubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: coinbaseproWebsocketURL,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
Unsubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (c *Coinbene) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (c *Coinbene) GetDefaultConfig() (*config.Exchange, error) {
|
||||
c.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = c.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = c.BaseCurrencies
|
||||
@@ -169,7 +169,7 @@ func (c *Coinbene) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (c *Coinbene) Setup(exch *config.ExchangeConfig) error {
|
||||
func (c *Coinbene) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
c.SetEnabled(false)
|
||||
return nil
|
||||
@@ -186,22 +186,15 @@ func (c *Coinbene) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = c.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: wsContractURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
UnSubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: wsContractURL,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
Unsubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (c *COINUT) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (c *COINUT) GetDefaultConfig() (*config.Exchange, error) {
|
||||
c.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = c.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = c.BaseCurrencies
|
||||
@@ -131,7 +131,7 @@ func (c *COINUT) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets the current exchange configuration
|
||||
func (c *COINUT) Setup(exch *config.ExchangeConfig) error {
|
||||
func (c *COINUT) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
c.SetEnabled(false)
|
||||
return nil
|
||||
@@ -148,23 +148,16 @@ func (c *COINUT) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = c.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: coinutWebsocketURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
UnSubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: coinutWebsocketURL,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: c.WsConnect,
|
||||
Subscriber: c.Subscribe,
|
||||
Unsubscriber: c.Unsubscribe,
|
||||
GenerateSubscriptions: c.GenerateDefaultSubscriptions,
|
||||
Features: &c.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -558,7 +558,7 @@ func (b *Base) SetAPIKeys(apiKey, apiSecret, clientID string) {
|
||||
}
|
||||
|
||||
// SetupDefaults sets the exchange settings based on the supplied config
|
||||
func (b *Base) SetupDefaults(exch *config.ExchangeConfig) error {
|
||||
func (b *Base) SetupDefaults(exch *config.Exchange) error {
|
||||
b.Enabled = true
|
||||
b.LoadedByConfig = true
|
||||
b.Config = exch
|
||||
@@ -614,12 +614,12 @@ func (b *Base) SetupDefaults(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
b.BaseCurrencies = exch.BaseCurrencies
|
||||
|
||||
if exch.OrderbookConfig.VerificationBypass {
|
||||
if exch.Orderbook.VerificationBypass {
|
||||
log.Warnf(log.ExchangeSys,
|
||||
"%s orderbook verification has been bypassed via config.",
|
||||
b.Name)
|
||||
}
|
||||
b.CanVerifyOrderbook = !exch.OrderbookConfig.VerificationBypass
|
||||
b.CanVerifyOrderbook = !exch.Orderbook.VerificationBypass
|
||||
b.States = currencystate.NewCurrencyStates()
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@ func TestSetFeatureDefaults(t *testing.T) {
|
||||
|
||||
// Test nil features with basic support capabilities
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{
|
||||
Config: &config.Exchange{
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
},
|
||||
Features: Features{
|
||||
@@ -345,7 +345,7 @@ func TestSetAPICredentialDefaults(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{},
|
||||
Config: &config.Exchange{},
|
||||
}
|
||||
b.API.CredentialsValidator.RequiresKey = true
|
||||
b.API.CredentialsValidator.RequiresSecret = true
|
||||
@@ -366,7 +366,7 @@ func TestSetAPICredentialDefaults(t *testing.T) {
|
||||
func TestSetAutoPairDefaults(t *testing.T) {
|
||||
t.Parallel()
|
||||
bs := "Bitstamp"
|
||||
cfg := &config.Config{Exchanges: []config.ExchangeConfig{
|
||||
cfg := &config.Config{Exchanges: []config.Exchange{
|
||||
{
|
||||
Name: bs,
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
@@ -499,7 +499,7 @@ func TestSetCurrencyPairFormat(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{},
|
||||
Config: &config.Exchange{},
|
||||
}
|
||||
b.SetCurrencyPairFormat()
|
||||
if b.Config.CurrencyPairs == nil {
|
||||
@@ -580,7 +580,7 @@ func TestLoadConfigPairs(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Config: &config.ExchangeConfig{
|
||||
Config: &config.Exchange{
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
},
|
||||
}
|
||||
@@ -1266,7 +1266,7 @@ func TestSetupDefaults(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var b = Base{Name: "awesomeTest"}
|
||||
cfg := config.ExchangeConfig{
|
||||
cfg := config.Exchange{
|
||||
HTTPTimeout: time.Duration(-1),
|
||||
API: config.APIConfig{
|
||||
AuthenticatedSupport: true,
|
||||
@@ -1319,12 +1319,14 @@ func TestSetupDefaults(t *testing.T) {
|
||||
b.Websocket = stream.New()
|
||||
b.Features.Supports.Websocket = true
|
||||
err = b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: false,
|
||||
WebsocketTimeout: time.Second * 30,
|
||||
ExchangeConfig: &config.Exchange{
|
||||
WebsocketTrafficTimeout: time.Second * 30,
|
||||
Name: "test",
|
||||
Features: &config.FeaturesConfig{},
|
||||
},
|
||||
Features: &protocol.Features{},
|
||||
DefaultURL: "ws://something.com",
|
||||
RunningURL: "ws://something.com",
|
||||
ExchangeName: "test",
|
||||
Connector: func() error { return nil },
|
||||
GenerateSubscriptions: func() ([]stream.ChannelSubscription, error) { return []stream.ChannelSubscription{}, nil },
|
||||
Subscriber: func(cs []stream.ChannelSubscription) error { return nil },
|
||||
@@ -1450,7 +1452,7 @@ func TestSetPairs(t *testing.T) {
|
||||
Uppercase: true,
|
||||
},
|
||||
},
|
||||
Config: &config.ExchangeConfig{
|
||||
Config: &config.Exchange{
|
||||
CurrencyPairs: ¤cy.PairsManager{
|
||||
UseGlobalFormat: true,
|
||||
ConfigFormat: ¤cy.PairFormat{
|
||||
@@ -1500,7 +1502,7 @@ func TestSetPairs(t *testing.T) {
|
||||
func TestUpdatePairs(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := &config.Config{
|
||||
Exchanges: []config.ExchangeConfig{
|
||||
Exchanges: []config.Exchange{
|
||||
{
|
||||
Name: defaultTestExchange,
|
||||
CurrencyPairs: ¤cy.PairsManager{},
|
||||
@@ -1667,12 +1669,19 @@ func TestIsWebsocketEnabled(t *testing.T) {
|
||||
|
||||
b.Websocket = stream.New()
|
||||
err := b.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: true,
|
||||
WebsocketTimeout: time.Second * 30,
|
||||
ExchangeConfig: &config.Exchange{
|
||||
Enabled: true,
|
||||
WebsocketTrafficTimeout: time.Second * 30,
|
||||
Name: "test",
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{
|
||||
Websocket: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
Features: &protocol.Features{},
|
||||
DefaultURL: "ws://something.com",
|
||||
RunningURL: "ws://something.com",
|
||||
ExchangeName: "test",
|
||||
Connector: func() error { return nil },
|
||||
GenerateSubscriptions: func() ([]stream.ChannelSubscription, error) { return nil, nil },
|
||||
Subscriber: func(cs []stream.ChannelSubscription) error { return nil },
|
||||
@@ -1827,7 +1836,7 @@ func TestGetAssetType(t *testing.T) {
|
||||
func TestGetFormattedPairAndAssetType(t *testing.T) {
|
||||
t.Parallel()
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{},
|
||||
Config: &config.Exchange{},
|
||||
}
|
||||
b.SetCurrencyPairFormat()
|
||||
b.Config.CurrencyPairs.UseGlobalFormat = true
|
||||
@@ -1865,7 +1874,7 @@ func TestGetFormattedPairAndAssetType(t *testing.T) {
|
||||
|
||||
func TestStoreAssetPairFormat(t *testing.T) {
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{Name: "kitties"},
|
||||
Config: &config.Exchange{Name: "kitties"},
|
||||
}
|
||||
|
||||
err := b.StoreAssetPairFormat(asset.Item(""), currency.PairStore{})
|
||||
@@ -1901,7 +1910,7 @@ func TestStoreAssetPairFormat(t *testing.T) {
|
||||
|
||||
func TestSetGlobalPairsManager(t *testing.T) {
|
||||
b := Base{
|
||||
Config: &config.ExchangeConfig{Name: "kitties"},
|
||||
Config: &config.Exchange{Name: "kitties"},
|
||||
}
|
||||
|
||||
err := b.SetGlobalPairsManager(nil, nil, "")
|
||||
@@ -2162,7 +2171,7 @@ func TestSetSaveTradeDataStatus(t *testing.T) {
|
||||
SaveTradeData: false,
|
||||
},
|
||||
},
|
||||
Config: &config.ExchangeConfig{
|
||||
Config: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{},
|
||||
},
|
||||
@@ -2190,7 +2199,7 @@ func TestAddTradesToBuffer(t *testing.T) {
|
||||
Features: Features{
|
||||
Enabled: FeaturesEnabled{},
|
||||
},
|
||||
Config: &config.ExchangeConfig{
|
||||
Config: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{},
|
||||
},
|
||||
@@ -2284,7 +2293,7 @@ func TestSetAPIURL(t *testing.T) {
|
||||
b := Base{
|
||||
Name: "SomeExchange",
|
||||
}
|
||||
b.Config = &config.ExchangeConfig{}
|
||||
b.Config = &config.Exchange{}
|
||||
var mappy struct {
|
||||
Mappymap map[string]string `json:"urlEndpoints"`
|
||||
}
|
||||
|
||||
@@ -225,7 +225,7 @@ type Base struct {
|
||||
WebsocketOrderbookBufferLimit int64
|
||||
Websocket *stream.Websocket
|
||||
*request.Requester
|
||||
Config *config.ExchangeConfig
|
||||
Config *config.Exchange
|
||||
settingsMutex sync.RWMutex
|
||||
// CanVerifyOrderbook determines if the orderbook verification can be bypassed,
|
||||
// increasing potential update speed but decreasing confidence in orderbook
|
||||
|
||||
@@ -29,9 +29,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (e *EXMO) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (e *EXMO) GetDefaultConfig() (*config.Exchange, error) {
|
||||
e.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = e.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = e.BaseCurrencies
|
||||
@@ -123,7 +123,7 @@ func (e *EXMO) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (e *EXMO) Setup(exch *config.ExchangeConfig) error {
|
||||
func (e *EXMO) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
e.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (f *FTX) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (f *FTX) GetDefaultConfig() (*config.Exchange, error) {
|
||||
f.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = f.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = f.BaseCurrencies
|
||||
@@ -165,7 +165,7 @@ func (f *FTX) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
func (f *FTX) Setup(exch *config.ExchangeConfig) error {
|
||||
func (f *FTX) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
f.SetEnabled(false)
|
||||
return nil
|
||||
@@ -182,21 +182,14 @@ func (f *FTX) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = f.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: ftxWSURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: f.WsConnect,
|
||||
Subscriber: f.Subscribe,
|
||||
UnSubscriber: f.Unsubscribe,
|
||||
GenerateSubscriptions: f.GenerateDefaultSubscriptions,
|
||||
Features: &f.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: ftxWSURL,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: f.WsConnect,
|
||||
Subscriber: f.Subscribe,
|
||||
Unsubscriber: f.Unsubscribe,
|
||||
GenerateSubscriptions: f.GenerateDefaultSubscriptions,
|
||||
Features: &f.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (g *Gateio) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (g *Gateio) GetDefaultConfig() (*config.Exchange, error) {
|
||||
g.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = g.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = g.BaseCurrencies
|
||||
@@ -148,7 +148,7 @@ func (g *Gateio) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets user configuration
|
||||
func (g *Gateio) Setup(exch *config.ExchangeConfig) error {
|
||||
func (g *Gateio) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
g.SetEnabled(false)
|
||||
return nil
|
||||
@@ -165,20 +165,13 @@ func (g *Gateio) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = g.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: gateioWebsocketEndpoint,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: g.WsConnect,
|
||||
Subscriber: g.Subscribe,
|
||||
GenerateSubscriptions: g.GenerateDefaultSubscriptions,
|
||||
Features: &g.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: gateioWebsocketEndpoint,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: g.WsConnect,
|
||||
Subscriber: g.Subscribe,
|
||||
GenerateSubscriptions: g.GenerateDefaultSubscriptions,
|
||||
Features: &g.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (g *Gemini) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (g *Gemini) GetDefaultConfig() (*config.Exchange, error) {
|
||||
g.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = g.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = g.BaseCurrencies
|
||||
@@ -131,7 +131,7 @@ func (g *Gemini) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets exchange configuration parameters
|
||||
func (g *Gemini) Setup(exch *config.ExchangeConfig) error {
|
||||
func (g *Gemini) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
g.SetEnabled(false)
|
||||
return nil
|
||||
@@ -155,21 +155,14 @@ func (g *Gemini) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = g.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: geminiWebsocketEndpoint,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: g.WsConnect,
|
||||
Subscriber: g.Subscribe,
|
||||
UnSubscriber: g.Unsubscribe,
|
||||
GenerateSubscriptions: g.GenerateDefaultSubscriptions,
|
||||
Features: &g.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: geminiWebsocketEndpoint,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: g.WsConnect,
|
||||
Subscriber: g.Subscribe,
|
||||
Unsubscriber: g.Unsubscribe,
|
||||
GenerateSubscriptions: g.GenerateDefaultSubscriptions,
|
||||
Features: &g.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (h *HitBTC) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (h *HitBTC) GetDefaultConfig() (*config.Exchange, error) {
|
||||
h.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = h.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = h.BaseCurrencies
|
||||
@@ -147,7 +147,7 @@ func (h *HitBTC) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets user exchange configuration settings
|
||||
func (h *HitBTC) Setup(exch *config.ExchangeConfig) error {
|
||||
func (h *HitBTC) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
h.SetEnabled(false)
|
||||
return nil
|
||||
@@ -164,23 +164,16 @@ func (h *HitBTC) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = h.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: hitbtcWebsocketAddress,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: h.WsConnect,
|
||||
Subscriber: h.Subscribe,
|
||||
UnSubscriber: h.Unsubscribe,
|
||||
GenerateSubscriptions: h.GenerateDefaultSubscriptions,
|
||||
Features: &h.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: hitbtcWebsocketAddress,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: h.WsConnect,
|
||||
Subscriber: h.Subscribe,
|
||||
Unsubscriber: h.Unsubscribe,
|
||||
GenerateSubscriptions: h.GenerateDefaultSubscriptions,
|
||||
Features: &h.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (h *HUOBI) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (h *HUOBI) GetDefaultConfig() (*config.Exchange, error) {
|
||||
h.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = h.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = h.BaseCurrencies
|
||||
@@ -178,7 +178,7 @@ func (h *HUOBI) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets user configuration
|
||||
func (h *HUOBI) Setup(exch *config.ExchangeConfig) error {
|
||||
func (h *HUOBI) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
h.SetEnabled(false)
|
||||
return nil
|
||||
@@ -195,21 +195,14 @@ func (h *HUOBI) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = h.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: wsMarketURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: h.WsConnect,
|
||||
Subscriber: h.Subscribe,
|
||||
UnSubscriber: h.Unsubscribe,
|
||||
GenerateSubscriptions: h.GenerateDefaultSubscriptions,
|
||||
Features: &h.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: wsMarketURL,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: h.WsConnect,
|
||||
Subscriber: h.Subscribe,
|
||||
Unsubscriber: h.Unsubscribe,
|
||||
GenerateSubscriptions: h.GenerateDefaultSubscriptions,
|
||||
Features: &h.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -277,7 +270,7 @@ func (h *HUOBI) Run() {
|
||||
|
||||
if common.StringDataContains(h.BaseCurrencies.Strings(), currency.CNY.String()) {
|
||||
cfg := config.GetConfig()
|
||||
var exchCfg *config.ExchangeConfig
|
||||
var exchCfg *config.Exchange
|
||||
exchCfg, err = cfg.GetExchangeConfig(h.Name)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
// IBotExchange enforces standard functions for all exchanges supported in
|
||||
// GoCryptoTrader
|
||||
type IBotExchange interface {
|
||||
Setup(exch *config.ExchangeConfig) error
|
||||
Setup(exch *config.Exchange) error
|
||||
Start(wg *sync.WaitGroup)
|
||||
SetDefaults()
|
||||
GetName() string
|
||||
@@ -73,7 +73,7 @@ type IBotExchange interface {
|
||||
SetClientProxyAddress(addr string) error
|
||||
SupportsREST() bool
|
||||
GetSubscriptions() ([]stream.ChannelSubscription, error)
|
||||
GetDefaultConfig() (*config.ExchangeConfig, error)
|
||||
GetDefaultConfig() (*config.Exchange, error)
|
||||
GetBase() *Base
|
||||
SupportsAsset(assetType asset.Item) bool
|
||||
GetHistoricCandles(ctx context.Context, p currency.Pair, a asset.Item, timeStart, timeEnd time.Time, interval kline.Interval) (kline.Item, error)
|
||||
|
||||
@@ -29,9 +29,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (i *ItBit) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (i *ItBit) GetDefaultConfig() (*config.Exchange, error) {
|
||||
i.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = i.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = i.BaseCurrencies
|
||||
@@ -106,7 +106,7 @@ func (i *ItBit) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets the exchange parameters from exchange config
|
||||
func (i *ItBit) Setup(exch *config.ExchangeConfig) error {
|
||||
func (i *ItBit) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
i.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -31,9 +31,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (k *Kraken) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (k *Kraken) GetDefaultConfig() (*config.Exchange, error) {
|
||||
k.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = k.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = k.BaseCurrencies
|
||||
@@ -190,7 +190,7 @@ func (k *Kraken) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets current exchange configuration
|
||||
func (k *Kraken) Setup(exch *config.ExchangeConfig) error {
|
||||
func (k *Kraken) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
k.SetEnabled(false)
|
||||
return nil
|
||||
@@ -211,22 +211,15 @@ func (k *Kraken) Setup(exch *config.ExchangeConfig) error {
|
||||
return err
|
||||
}
|
||||
err = k.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: krakenWSURL,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: k.WsConnect,
|
||||
Subscriber: k.Subscribe,
|
||||
UnSubscriber: k.Unsubscribe,
|
||||
GenerateSubscriptions: k.GenerateDefaultSubscriptions,
|
||||
Features: &k.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: krakenWSURL,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: k.WsConnect,
|
||||
Subscriber: k.Subscribe,
|
||||
Unsubscriber: k.Unsubscribe,
|
||||
GenerateSubscriptions: k.GenerateDefaultSubscriptions,
|
||||
Features: &k.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -28,9 +28,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (l *Lbank) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (l *Lbank) GetDefaultConfig() (*config.Exchange, error) {
|
||||
l.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = l.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = l.BaseCurrencies
|
||||
@@ -120,7 +120,7 @@ func (l *Lbank) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets exchange configuration profile
|
||||
func (l *Lbank) Setup(exch *config.ExchangeConfig) error {
|
||||
func (l *Lbank) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
l.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (l *LocalBitcoins) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (l *LocalBitcoins) GetDefaultConfig() (*config.Exchange, error) {
|
||||
l.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = l.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = l.BaseCurrencies
|
||||
@@ -105,7 +105,7 @@ func (l *LocalBitcoins) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets exchange configuration parameters
|
||||
func (l *LocalBitcoins) Setup(exch *config.ExchangeConfig) error {
|
||||
func (l *LocalBitcoins) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
l.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -23,9 +23,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (o *OKCoin) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (o *OKCoin) GetDefaultConfig() (*config.Exchange, error) {
|
||||
o.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = o.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = o.BaseCurrencies
|
||||
|
||||
@@ -25,9 +25,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (o *OKEX) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (o *OKEX) GetDefaultConfig() (*config.Exchange, error) {
|
||||
o.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = o.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = o.BaseCurrencies
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
// When circumstances change, wrapper funcs can be split appropriately
|
||||
|
||||
// Setup sets user exchange configuration settings
|
||||
func (o *OKGroup) Setup(exch *config.ExchangeConfig) error {
|
||||
func (o *OKGroup) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
o.SetEnabled(false)
|
||||
return nil
|
||||
@@ -46,21 +46,14 @@ func (o *OKGroup) Setup(exch *config.ExchangeConfig) error {
|
||||
return err
|
||||
}
|
||||
err = o.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: wsEndpoint,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: o.WsConnect,
|
||||
Subscriber: o.Subscribe,
|
||||
UnSubscriber: o.Unsubscribe,
|
||||
GenerateSubscriptions: o.GenerateDefaultSubscriptions,
|
||||
Features: &o.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: wsEndpoint,
|
||||
RunningURL: wsEndpoint,
|
||||
Connector: o.WsConnect,
|
||||
Subscriber: o.Subscribe,
|
||||
Unsubscriber: o.Unsubscribe,
|
||||
GenerateSubscriptions: o.GenerateDefaultSubscriptions,
|
||||
Features: &o.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (p *Poloniex) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (p *Poloniex) GetDefaultConfig() (*config.Exchange, error) {
|
||||
p.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = p.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = p.BaseCurrencies
|
||||
@@ -151,7 +151,7 @@ func (p *Poloniex) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets user exchange configuration settings
|
||||
func (p *Poloniex) Setup(exch *config.ExchangeConfig) error {
|
||||
func (p *Poloniex) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
p.SetEnabled(false)
|
||||
return nil
|
||||
@@ -168,23 +168,16 @@ func (p *Poloniex) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = p.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: poloniexWebsocketAddress,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: p.WsConnect,
|
||||
Subscriber: p.Subscribe,
|
||||
UnSubscriber: p.Unsubscribe,
|
||||
GenerateSubscriptions: p.GenerateDefaultSubscriptions,
|
||||
Features: &p.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: poloniexWebsocketAddress,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: p.WsConnect,
|
||||
Subscriber: p.Subscribe,
|
||||
Unsubscriber: p.Unsubscribe,
|
||||
GenerateSubscriptions: p.GenerateDefaultSubscriptions,
|
||||
Features: &p.Features.Supports.WebsocketCapabilities,
|
||||
SortBuffer: true,
|
||||
SortBufferByUpdateIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -24,7 +24,7 @@ type CustomEx struct {
|
||||
exchange.Base
|
||||
}
|
||||
|
||||
func (c *CustomEx) Setup(exch *config.ExchangeConfig) error {
|
||||
func (c *CustomEx) Setup(exch *config.Exchange) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ func (c *CustomEx) GetSubscriptions() ([]stream.ChannelSubscription, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *CustomEx) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (c *CustomEx) GetDefaultConfig() (*config.Exchange, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
@@ -15,7 +16,7 @@ import (
|
||||
const packageError = "websocket orderbook buffer error: %w"
|
||||
|
||||
var (
|
||||
errUnsetExchangeName = errors.New("exchange name unset")
|
||||
errExchangeConfigNil = errors.New("exchange config is nil")
|
||||
errUnsetDataHandler = errors.New("datahandler unset")
|
||||
errIssueBufferEnabledButNoLimit = errors.New("buffer enabled but no limit set")
|
||||
errUpdateIsNil = errors.New("update is nil")
|
||||
@@ -25,34 +26,35 @@ var (
|
||||
)
|
||||
|
||||
// Setup sets private variables
|
||||
func (w *Orderbook) Setup(obBufferLimit int,
|
||||
bufferEnabled,
|
||||
sortBuffer,
|
||||
sortBufferByUpdateIDs,
|
||||
updateEntriesByID,
|
||||
verbose bool,
|
||||
publishPeriod time.Duration,
|
||||
exchangeName string,
|
||||
dataHandler chan interface{}) error {
|
||||
if exchangeName == "" {
|
||||
return fmt.Errorf(packageError, errUnsetExchangeName)
|
||||
func (w *Orderbook) Setup(cfg *config.Exchange, sortBuffer, sortBufferByUpdateIDs, updateEntriesByID bool, dataHandler chan interface{}) error {
|
||||
if cfg == nil { // exchange config fields are checked in stream package
|
||||
// prior to calling this, so further checks are not needed.
|
||||
return fmt.Errorf(packageError, errExchangeConfigNil)
|
||||
}
|
||||
if dataHandler == nil {
|
||||
return fmt.Errorf(packageError, errUnsetDataHandler)
|
||||
}
|
||||
if bufferEnabled && obBufferLimit < 1 {
|
||||
if cfg.Orderbook.WebsocketBufferEnabled &&
|
||||
cfg.Orderbook.WebsocketBufferLimit < 1 {
|
||||
return fmt.Errorf(packageError, errIssueBufferEnabledButNoLimit)
|
||||
}
|
||||
w.obBufferLimit = obBufferLimit
|
||||
w.bufferEnabled = bufferEnabled
|
||||
|
||||
w.bufferEnabled = cfg.Orderbook.WebsocketBufferEnabled
|
||||
w.obBufferLimit = cfg.Orderbook.WebsocketBufferLimit
|
||||
w.sortBuffer = sortBuffer
|
||||
w.sortBufferByUpdateIDs = sortBufferByUpdateIDs
|
||||
w.updateEntriesByID = updateEntriesByID
|
||||
w.exchangeName = exchangeName
|
||||
w.exchangeName = cfg.Name
|
||||
w.dataHandler = dataHandler
|
||||
w.ob = make(map[currency.Code]map[currency.Code]map[asset.Item]*orderbookHolder)
|
||||
w.verbose = verbose
|
||||
w.publishPeriod = publishPeriod
|
||||
w.verbose = cfg.Verbose
|
||||
|
||||
// set default publish period if missing
|
||||
orderbookPublishPeriod := config.DefaultOrderbookPublishPeriod
|
||||
if cfg.Orderbook.PublishPeriod != nil {
|
||||
orderbookPublishPeriod = *cfg.Orderbook.PublishPeriod
|
||||
}
|
||||
w.publishPeriod = orderbookPublishPeriod
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -6,21 +6,24 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
)
|
||||
|
||||
var itemArray = [][]orderbook.Item{
|
||||
{{Price: 1000, Amount: 1, ID: 1000}},
|
||||
{{Price: 2000, Amount: 1, ID: 2000}},
|
||||
{{Price: 3000, Amount: 1, ID: 3000}},
|
||||
{{Price: 3000, Amount: 2, ID: 4000}},
|
||||
{{Price: 4000, Amount: 0, ID: 6000}},
|
||||
{{Price: 5000, Amount: 1, ID: 5000}},
|
||||
}
|
||||
var (
|
||||
itemArray = [][]orderbook.Item{
|
||||
{{Price: 1000, Amount: 1, ID: 1000}},
|
||||
{{Price: 2000, Amount: 1, ID: 2000}},
|
||||
{{Price: 3000, Amount: 1, ID: 3000}},
|
||||
{{Price: 3000, Amount: 2, ID: 4000}},
|
||||
{{Price: 4000, Amount: 0, ID: 6000}},
|
||||
{{Price: 5000, Amount: 1, ID: 5000}},
|
||||
}
|
||||
|
||||
var cp, _ = currency.NewPairFromString("BTCUSD")
|
||||
cp, _ = currency.NewPairFromString("BTCUSD")
|
||||
)
|
||||
|
||||
const (
|
||||
exchangeName = "exchangeTest"
|
||||
@@ -712,22 +715,27 @@ func TestGetOrderbook(t *testing.T) {
|
||||
func TestSetup(t *testing.T) {
|
||||
t.Parallel()
|
||||
w := Orderbook{}
|
||||
err := w.Setup(0, false, false, false, false, true, 0, "", nil)
|
||||
if !errors.Is(err, errUnsetExchangeName) {
|
||||
t.Fatalf("expected error %v but received %v", errUnsetExchangeName, err)
|
||||
err := w.Setup(nil, false, false, false, nil)
|
||||
if !errors.Is(err, errExchangeConfigNil) {
|
||||
t.Fatalf("expected error %v but received %v", errExchangeConfigNil, err)
|
||||
}
|
||||
|
||||
err = w.Setup(0, false, false, false, false, false, 0, "test", nil)
|
||||
exchangeConfig := &config.Exchange{}
|
||||
err = w.Setup(exchangeConfig, false, false, false, nil)
|
||||
if !errors.Is(err, errUnsetDataHandler) {
|
||||
t.Fatalf("expected error %v but received %v", errUnsetDataHandler, err)
|
||||
}
|
||||
|
||||
err = w.Setup(0, true, false, false, false, true, 0, "test", make(chan interface{}))
|
||||
exchangeConfig.Orderbook.WebsocketBufferEnabled = true
|
||||
err = w.Setup(exchangeConfig, false, false, false, make(chan interface{}))
|
||||
if !errors.Is(err, errIssueBufferEnabledButNoLimit) {
|
||||
t.Fatalf("expected error %v but received %v", errIssueBufferEnabledButNoLimit, err)
|
||||
}
|
||||
|
||||
err = w.Setup(1337, true, true, true, true, false, 0, "test", make(chan interface{}))
|
||||
exchangeConfig.Orderbook.WebsocketBufferLimit = 1337
|
||||
exchangeConfig.Orderbook.WebsocketBufferEnabled = true
|
||||
exchangeConfig.Name = "test"
|
||||
err = w.Setup(exchangeConfig, true, true, true, make(chan interface{}))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1002,7 +1010,7 @@ func TestUpdateByIDAndAction(t *testing.T) {
|
||||
func TestFlushOrderbook(t *testing.T) {
|
||||
t.Parallel()
|
||||
w := &Orderbook{}
|
||||
err := w.Setup(5, false, false, false, false, false, 0, "test", make(chan interface{}, 2))
|
||||
err := w.Setup(&config.Exchange{Name: "test"}, false, false, false, make(chan interface{}, 2))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -24,10 +24,26 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
errClosedConnection = errors.New("use of closed network connection")
|
||||
// ErrSubscriptionFailure defines an error when a subscription fails
|
||||
ErrSubscriptionFailure = errors.New("subscription failure")
|
||||
errAlreadyRunning = errors.New("connection monitor is already running")
|
||||
|
||||
errAlreadyRunning = errors.New("connection monitor is already running")
|
||||
errExchangeConfigIsNil = errors.New("exchange config is nil")
|
||||
errWebsocketIsNil = errors.New("websocket is nil")
|
||||
errWebsocketSetupIsNil = errors.New("websocket setup is nil")
|
||||
errWebsocketAlreadyInitialised = errors.New("websocket already initialised")
|
||||
errWebsocketFeaturesIsUnset = errors.New("websocket features is unset")
|
||||
errConfigFeaturesIsNil = errors.New("exchange config features is nil")
|
||||
errDefaultURLIsEmpty = errors.New("default url is empty")
|
||||
errRunningURLIsEmpty = errors.New("running url cannot be empty")
|
||||
errInvalidWebsocketURL = errors.New("invalid websocket url")
|
||||
errExchangeConfigNameUnset = errors.New("exchange config name unset")
|
||||
errInvalidTrafficTimeout = errors.New("invalid traffic timeout")
|
||||
errWebsocketSubscriberUnset = errors.New("websocket subscriber function needs to be set")
|
||||
errWebsocketUnsubscriberUnset = errors.New("websocket unsubscriber functionality allowed but unsubscriber function not set")
|
||||
errWebsocketConnectorUnset = errors.New("websocket connector function not set")
|
||||
errWebsocketSubscriptionsGeneratorUnset = errors.New("websocket subscriptions generator function needs to be set")
|
||||
errClosedConnection = errors.New("use of closed network connection")
|
||||
)
|
||||
|
||||
// New initialises the websocket struct
|
||||
@@ -44,97 +60,95 @@ func New() *Websocket {
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
errSubscriberUnset = errors.New("subscriber function needs to be set")
|
||||
errGenerateSubsciptionsUnset = errors.New("generate subscriptions function needs to be set")
|
||||
)
|
||||
|
||||
// Setup sets main variables for websocket connection
|
||||
func (w *Websocket) Setup(s *WebsocketSetup) error {
|
||||
if w == nil {
|
||||
return errors.New("websocket is nil")
|
||||
return errWebsocketIsNil
|
||||
}
|
||||
|
||||
if s == nil {
|
||||
return errors.New("websocket setup is nil")
|
||||
return errWebsocketSetupIsNil
|
||||
}
|
||||
|
||||
if !w.Init {
|
||||
return fmt.Errorf("%s Websocket already initialised",
|
||||
s.ExchangeName)
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketAlreadyInitialised)
|
||||
}
|
||||
|
||||
w.verbose = s.Verbose
|
||||
if s.ExchangeConfig == nil {
|
||||
return errExchangeConfigIsNil
|
||||
}
|
||||
|
||||
if s.ExchangeConfig.Name == "" {
|
||||
return errExchangeConfigNameUnset
|
||||
}
|
||||
w.exchangeName = s.ExchangeConfig.Name
|
||||
w.verbose = s.ExchangeConfig.Verbose
|
||||
|
||||
if s.Features == nil {
|
||||
return errors.New("websocket features is unset")
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketFeaturesIsUnset)
|
||||
}
|
||||
|
||||
w.features = s.Features
|
||||
|
||||
if s.ExchangeConfig.Features == nil {
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errConfigFeaturesIsNil)
|
||||
}
|
||||
w.enabled = s.ExchangeConfig.Features.Enabled.Websocket
|
||||
|
||||
if s.Connector == nil {
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketConnectorUnset)
|
||||
}
|
||||
w.connector = s.Connector
|
||||
|
||||
if s.Subscriber == nil {
|
||||
return errSubscriberUnset
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketSubscriberUnset)
|
||||
}
|
||||
w.Subscriber = s.Subscriber
|
||||
|
||||
if w.features.Unsubscribe && s.UnSubscriber == nil {
|
||||
return errors.New("features have been set yet channel unsubscriber is not set")
|
||||
if w.features.Unsubscribe && s.Unsubscriber == nil {
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketUnsubscriberUnset)
|
||||
}
|
||||
w.Unsubscriber = s.UnSubscriber
|
||||
w.Unsubscriber = s.Unsubscriber
|
||||
|
||||
if s.GenerateSubscriptions == nil {
|
||||
return errGenerateSubsciptionsUnset
|
||||
return fmt.Errorf("%s %w", w.exchangeName, errWebsocketSubscriptionsGeneratorUnset)
|
||||
}
|
||||
w.GenerateSubs = s.GenerateSubscriptions
|
||||
|
||||
w.enabled = s.Enabled
|
||||
if s.DefaultURL == "" {
|
||||
return errors.New("default url is empty")
|
||||
return fmt.Errorf("%s websocket %w", w.exchangeName, errDefaultURLIsEmpty)
|
||||
}
|
||||
w.defaultURL = s.DefaultURL
|
||||
if s.RunningURL == "" {
|
||||
return errors.New("running URL cannot be nil")
|
||||
return fmt.Errorf("%s websocket %w", w.exchangeName, errRunningURLIsEmpty)
|
||||
}
|
||||
err := w.SetWebsocketURL(s.RunningURL, false, false)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("%s %w", w.exchangeName, err)
|
||||
}
|
||||
|
||||
if s.RunningURLAuth != "" {
|
||||
err = w.SetWebsocketURL(s.RunningURLAuth, true, false)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("%s %w", w.exchangeName, err)
|
||||
}
|
||||
}
|
||||
|
||||
w.connector = s.Connector
|
||||
if s.ExchangeName == "" {
|
||||
return errors.New("exchange name unset")
|
||||
if s.ExchangeConfig.WebsocketTrafficTimeout < time.Second {
|
||||
return fmt.Errorf("%s %w cannot be less than %s",
|
||||
w.exchangeName,
|
||||
errInvalidTrafficTimeout,
|
||||
time.Second)
|
||||
}
|
||||
w.exchangeName = s.ExchangeName
|
||||
|
||||
if s.WebsocketTimeout < time.Second {
|
||||
return fmt.Errorf("traffic timeout cannot be less than %s", time.Second)
|
||||
}
|
||||
w.trafficTimeout = s.WebsocketTimeout
|
||||
w.trafficTimeout = s.ExchangeConfig.WebsocketTrafficTimeout
|
||||
|
||||
w.ShutdownC = make(chan struct{})
|
||||
w.Wg = new(sync.WaitGroup)
|
||||
w.SetCanUseAuthenticatedEndpoints(s.AuthenticatedWebsocketAPISupport)
|
||||
w.SetCanUseAuthenticatedEndpoints(s.ExchangeConfig.API.AuthenticatedWebsocketSupport)
|
||||
|
||||
// default publish period if missing
|
||||
orderbookPublishPeriod := config.DefaultOrderbookPublishPeriod
|
||||
if s.OrderbookPublishPeriod != nil {
|
||||
orderbookPublishPeriod = *s.OrderbookPublishPeriod
|
||||
}
|
||||
|
||||
return w.Orderbook.Setup(s.OrderbookBufferLimit,
|
||||
s.BufferEnabled,
|
||||
return w.Orderbook.Setup(s.ExchangeConfig,
|
||||
s.SortBuffer,
|
||||
s.SortBufferByUpdateIDs,
|
||||
s.UpdateEntriesByID,
|
||||
s.Verbose,
|
||||
orderbookPublishPeriod,
|
||||
w.exchangeName,
|
||||
w.DataHandler)
|
||||
}
|
||||
|
||||
@@ -948,7 +962,7 @@ func checkWebsocketURL(s string) error {
|
||||
return err
|
||||
}
|
||||
if u.Scheme != "ws" && u.Scheme != "wss" {
|
||||
return fmt.Errorf("cannot set invalid websocket URL %s", s)
|
||||
return fmt.Errorf("cannot set %w %s", errInvalidWebsocketURL, s)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
||||
)
|
||||
@@ -52,15 +53,21 @@ type testResponse struct {
|
||||
}
|
||||
|
||||
var defaultSetup = &WebsocketSetup{
|
||||
Enabled: true,
|
||||
AuthenticatedWebsocketAPISupport: true,
|
||||
WebsocketTimeout: time.Second * 5,
|
||||
DefaultURL: "testDefaultURL",
|
||||
ExchangeName: "exchangeName",
|
||||
RunningURL: "wss://testRunningURL",
|
||||
Connector: func() error { return nil },
|
||||
Subscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
UnSubscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
ExchangeConfig: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{Websocket: true},
|
||||
},
|
||||
API: config.APIConfig{
|
||||
AuthenticatedWebsocketSupport: true,
|
||||
},
|
||||
WebsocketTrafficTimeout: time.Second * 5,
|
||||
Name: "exchangeName",
|
||||
},
|
||||
DefaultURL: "testDefaultURL",
|
||||
RunningURL: "wss://testRunningURL",
|
||||
Connector: func() error { return nil },
|
||||
Subscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
Unsubscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
GenerateSubscriptions: func() ([]ChannelSubscription, error) {
|
||||
return []ChannelSubscription{
|
||||
{Channel: "TestSub"},
|
||||
@@ -90,75 +97,104 @@ func TestSetup(t *testing.T) {
|
||||
t.Parallel()
|
||||
var w *Websocket
|
||||
err := w.Setup(nil)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketIsNil)
|
||||
}
|
||||
|
||||
w = &Websocket{DataHandler: make(chan interface{})}
|
||||
err = w.Setup(nil)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketSetupIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSetupIsNil)
|
||||
}
|
||||
w.Init = true
|
||||
|
||||
websocketSetup := &WebsocketSetup{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketAlreadyInitialised) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketAlreadyInitialised)
|
||||
}
|
||||
|
||||
w.Init = true
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errExchangeConfigIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errExchangeConfigIsNil)
|
||||
}
|
||||
|
||||
websocketSetup.ExchangeConfig = &config.Exchange{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errExchangeConfigNameUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errExchangeConfigNameUnset)
|
||||
}
|
||||
websocketSetup.ExchangeConfig.Name = "testname"
|
||||
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errWebsocketFeaturesIsUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketFeaturesIsUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Features = &protocol.Features{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errConfigFeaturesIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errConfigFeaturesIsNil)
|
||||
}
|
||||
websocketSetup.Features.Subscribe = true
|
||||
|
||||
websocketSetup.ExchangeConfig.Features = &config.FeaturesConfig{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketConnectorUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketConnectorUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Connector = func() error { return nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errWebsocketSubscriberUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSubscriberUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Subscriber = func([]ChannelSubscription) error { return nil }
|
||||
websocketSetup.Features.Unsubscribe = true
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketUnsubscriberUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketUnsubscriberUnset)
|
||||
}
|
||||
websocketSetup.UnSubscriber = func([]ChannelSubscription) error { return nil }
|
||||
|
||||
websocketSetup.Unsubscriber = func([]ChannelSubscription) error { return nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.DefaultURL = "test"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURL = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURL = "wss://www.google.com"
|
||||
websocketSetup.RunningURLAuth = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURLAuth = "wss://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.ExchangeName = "testname"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.WebsocketTimeout = time.Minute
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errGenerateSubsciptionsUnset) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errGenerateSubsciptionsUnset)
|
||||
if !errors.Is(err, errWebsocketSubscriptionsGeneratorUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSubscriptionsGeneratorUnset)
|
||||
}
|
||||
|
||||
websocketSetup.GenerateSubscriptions = func() ([]ChannelSubscription, error) { return nil, nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errDefaultURLIsEmpty) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errDefaultURLIsEmpty)
|
||||
}
|
||||
|
||||
websocketSetup.DefaultURL = "test"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errRunningURLIsEmpty) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errRunningURLIsEmpty)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURL = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidWebsocketURL) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidWebsocketURL)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURL = "wss://www.google.com"
|
||||
websocketSetup.RunningURLAuth = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidWebsocketURL) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidWebsocketURL)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURLAuth = "wss://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidTrafficTimeout) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidTrafficTimeout)
|
||||
}
|
||||
|
||||
websocketSetup.ExchangeConfig.WebsocketTrafficTimeout = time.Minute
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: %v but expected: %v", err, nil)
|
||||
}
|
||||
@@ -294,11 +330,15 @@ func TestWebsocket(t *testing.T) {
|
||||
t.Parallel()
|
||||
wsInit := Websocket{}
|
||||
err := wsInit.Setup(&WebsocketSetup{
|
||||
ExchangeName: "test",
|
||||
Enabled: true,
|
||||
ExchangeConfig: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{Websocket: true},
|
||||
},
|
||||
Name: "test",
|
||||
},
|
||||
})
|
||||
if err != nil && err.Error() != "test Websocket already initialised" {
|
||||
t.Errorf("Expected 'test Websocket already initialised', received %v", err)
|
||||
if !errors.Is(err, errWebsocketAlreadyInitialised) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketAlreadyInitialised)
|
||||
}
|
||||
|
||||
ws := *New()
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/stream/buffer"
|
||||
)
|
||||
@@ -86,28 +87,19 @@ type Websocket struct {
|
||||
|
||||
// WebsocketSetup defines variables for setting up a websocket connection
|
||||
type WebsocketSetup struct {
|
||||
Enabled bool
|
||||
Verbose bool
|
||||
AuthenticatedWebsocketAPISupport bool
|
||||
WebsocketTimeout time.Duration
|
||||
DefaultURL string
|
||||
ExchangeName string
|
||||
RunningURL string
|
||||
RunningURLAuth string
|
||||
Connector func() error
|
||||
Subscriber func([]ChannelSubscription) error
|
||||
UnSubscriber func([]ChannelSubscription) error
|
||||
GenerateSubscriptions func() ([]ChannelSubscription, error)
|
||||
Features *protocol.Features
|
||||
ExchangeConfig *config.Exchange
|
||||
DefaultURL string
|
||||
RunningURL string
|
||||
RunningURLAuth string
|
||||
Connector func() error
|
||||
Subscriber func([]ChannelSubscription) error
|
||||
Unsubscriber func([]ChannelSubscription) error
|
||||
GenerateSubscriptions func() ([]ChannelSubscription, error)
|
||||
Features *protocol.Features
|
||||
// Local orderbook buffer config values
|
||||
OrderbookBufferLimit int
|
||||
BufferEnabled bool
|
||||
SortBuffer bool
|
||||
SortBufferByUpdateIDs bool
|
||||
UpdateEntriesByID bool
|
||||
// OrderbookPublishPeriod is a pointer for the same reason as it is in `OrderbookConfig`:
|
||||
// to allow distinguishing between a zeroed out value and a missing one
|
||||
OrderbookPublishPeriod *time.Duration
|
||||
}
|
||||
|
||||
// WebsocketConnection contains all the data needed to send a message to a WS
|
||||
|
||||
@@ -29,9 +29,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (y *Yobit) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (y *Yobit) GetDefaultConfig() (*config.Exchange, error) {
|
||||
y.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = y.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = y.BaseCurrencies
|
||||
@@ -111,7 +111,7 @@ func (y *Yobit) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets exchange configuration parameters for Yobit
|
||||
func (y *Yobit) Setup(exch *config.ExchangeConfig) error {
|
||||
func (y *Yobit) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
y.SetEnabled(false)
|
||||
return nil
|
||||
|
||||
@@ -25,7 +25,7 @@ func TestMain(m *testing.M) {
|
||||
if err != nil {
|
||||
log.Fatal("ZB load config error", err)
|
||||
}
|
||||
var zbConfig *config.ExchangeConfig
|
||||
var zbConfig *config.Exchange
|
||||
zbConfig, err = cfg.GetExchangeConfig("ZB")
|
||||
if err != nil {
|
||||
log.Fatal("ZB Setup() init error", err)
|
||||
|
||||
@@ -30,9 +30,9 @@ import (
|
||||
)
|
||||
|
||||
// GetDefaultConfig returns a default exchange config
|
||||
func (z *ZB) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
func (z *ZB) GetDefaultConfig() (*config.Exchange, error) {
|
||||
z.SetDefaults()
|
||||
exchCfg := new(config.ExchangeConfig)
|
||||
exchCfg := new(config.Exchange)
|
||||
exchCfg.Name = z.Name
|
||||
exchCfg.HTTPTimeout = exchange.DefaultHTTPTimeout
|
||||
exchCfg.BaseCurrencies = z.BaseCurrencies
|
||||
@@ -148,7 +148,7 @@ func (z *ZB) SetDefaults() {
|
||||
}
|
||||
|
||||
// Setup sets user configuration
|
||||
func (z *ZB) Setup(exch *config.ExchangeConfig) error {
|
||||
func (z *ZB) Setup(exch *config.Exchange) error {
|
||||
if !exch.Enabled {
|
||||
z.SetEnabled(false)
|
||||
return nil
|
||||
@@ -165,20 +165,13 @@ func (z *ZB) Setup(exch *config.ExchangeConfig) error {
|
||||
}
|
||||
|
||||
err = z.Websocket.Setup(&stream.WebsocketSetup{
|
||||
Enabled: exch.Features.Enabled.Websocket,
|
||||
Verbose: exch.Verbose,
|
||||
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
|
||||
WebsocketTimeout: exch.WebsocketTrafficTimeout,
|
||||
DefaultURL: zbWebsocketAPI,
|
||||
ExchangeName: exch.Name,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: z.WsConnect,
|
||||
GenerateSubscriptions: z.GenerateDefaultSubscriptions,
|
||||
Subscriber: z.Subscribe,
|
||||
Features: &z.Features.Supports.WebsocketCapabilities,
|
||||
OrderbookBufferLimit: exch.OrderbookConfig.WebsocketBufferLimit,
|
||||
OrderbookPublishPeriod: exch.OrderbookConfig.PublishPeriod,
|
||||
BufferEnabled: exch.OrderbookConfig.WebsocketBufferEnabled,
|
||||
ExchangeConfig: exch,
|
||||
DefaultURL: zbWebsocketAPI,
|
||||
RunningURL: wsRunningURL,
|
||||
Connector: z.WsConnect,
|
||||
GenerateSubscriptions: z.GenerateDefaultSubscriptions,
|
||||
Subscriber: z.Subscribe,
|
||||
Features: &z.Features.Supports.WebsocketCapabilities,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user