diff --git a/anxhttp.go b/anxhttp.go index e7b1ac6f..d5a079dc 100644 --- a/anxhttp.go +++ b/anxhttp.go @@ -24,16 +24,17 @@ const ( ) type ANX struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APIKey, APISecret string - TakerFee, MakerFee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APIKey, APISecret string + TakerFee, MakerFee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } type ANXOrder struct { @@ -112,12 +113,16 @@ func (a *ANX) IsEnabled() bool { } func (a *ANX) SetAPIKeys(apiKey, apiSecret string) { + if !a.AuthenticatedAPISupport { + return + } + a.APIKey = apiKey result, err := Base64Decode(apiSecret) if err != nil { - log.Printf("%s unable to decode secret key.", a.GetName()) - a.Enabled = false + log.Printf("%s unable to decode secret key. Authenticated API support disabled.", a.GetName()) + a.AuthenticatedAPISupport = true return } diff --git a/bitfinexhttp.go b/bitfinexhttp.go index 2f05d628..dc9f6580 100644 --- a/bitfinexhttp.go +++ b/bitfinexhttp.go @@ -141,23 +141,24 @@ type SymbolsDetails struct { } type Bitfinex struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APIKey, APISecret string - Ticker BitfinexTicker - Stats []BitfinexStats - Orderbook BitfinexOrderbook - Trades []TradeStructure - SymbolsDetails []SymbolsDetails - Fees []BitfinexFee - ActiveOrders []BitfinexActiveOrder - AccountBalance []BitfinexBalance - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APIKey, APISecret string + Ticker BitfinexTicker + Stats []BitfinexStats + Orderbook BitfinexOrderbook + Trades []TradeStructure + SymbolsDetails []SymbolsDetails + Fees []BitfinexFee + ActiveOrders []BitfinexActiveOrder + AccountBalance []BitfinexBalance + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } func (b *Bitfinex) SetDefaults() { diff --git a/bitstamphttp.go b/bitstamphttp.go index 3d8384e1..c6f4927b 100644 --- a/bitstamphttp.go +++ b/bitstamphttp.go @@ -36,6 +36,7 @@ type Bitstamp struct { Verbose bool Websocket bool RESTPollingDelay time.Duration + AuthenticatedAPISupport bool ClientID, APIKey, APISecret string Ticker BitstampTicker Orderbook Orderbook diff --git a/btcchinahttp.go b/btcchinahttp.go index 8710b580..4e869662 100644 --- a/btcchinahttp.go +++ b/btcchinahttp.go @@ -39,16 +39,17 @@ const ( ) type BTCChina struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APISecret, APIKey string - Fee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APISecret, APIKey string + Fee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } type BTCChinaTicker struct { diff --git a/btcehttp.go b/btcehttp.go index d665d44b..e34dadcc 100644 --- a/btcehttp.go +++ b/btcehttp.go @@ -27,17 +27,18 @@ const ( ) type BTCE struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APIKey, APISecret string - Fee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string - Ticker map[string]BTCeTicker + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APIKey, APISecret string + Fee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string + Ticker map[string]BTCeTicker } type BTCeTicker struct { diff --git a/btcmarkets.go b/btcmarkets.go index 0471f64c..507b1689 100644 --- a/btcmarkets.go +++ b/btcmarkets.go @@ -21,17 +21,18 @@ const ( ) type BTCMarkets struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - Fee float64 - Ticker map[string]BTCMarketsTicker - APIKey, APISecret string - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + Fee float64 + Ticker map[string]BTCMarketsTicker + AuthenticatedAPISupport bool + APIKey, APISecret string + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } type BTCMarketsTicker struct { @@ -105,6 +106,10 @@ func (b *BTCMarkets) IsEnabled() bool { } func (b *BTCMarkets) SetAPIKeys(apiKey, apiSecret string) { + if !b.AuthenticatedAPISupport { + return + } + b.APIKey = apiKey result, err := Base64Decode(apiSecret) diff --git a/coinbasehttp.go b/coinbasehttp.go index 2502da6c..19928776 100644 --- a/coinbasehttp.go +++ b/coinbasehttp.go @@ -35,6 +35,7 @@ type Coinbase struct { Verbose bool Websocket bool RESTPollingDelay time.Duration + AuthenticatedAPISupport bool Password, APIKey, APISecret string TakerFee, MakerFee float64 BaseCurrencies []string @@ -165,6 +166,10 @@ func (c *Coinbase) Run() { } func (c *Coinbase) SetAPIKeys(password, apiKey, apiSecret string) { + if !c.AuthenticatedAPISupport { + return + } + c.Password = password c.APIKey = apiKey result, err := Base64Decode(apiSecret) diff --git a/config.go b/config.go index 90ef0305..08820495 100644 --- a/config.go +++ b/config.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "log" "time" ) @@ -12,10 +13,11 @@ const ( ) var ( - ErrExchangeNameEmpty = "Exchange #%d in config: Exchange name is empty." - ErrExchangeAvailablePairsEmpty = "Exchange %s: Available pairs is empty." - ErrExchangeEnabledPairsEmpty = "Exchange %s: Enabled pairs is empty." - ErrExchangeBaseCurrenciesEmpty = "Exchange %s: Base currencies is empty." + ErrExchangeNameEmpty = "Exchange #%d in config: Exchange name is empty." + ErrExchangeAvailablePairsEmpty = "Exchange %s: Available pairs is empty." + ErrExchangeEnabledPairsEmpty = "Exchange %s: Enabled pairs is empty." + ErrExchangeBaseCurrenciesEmpty = "Exchange %s: Base currencies is empty." + ErrExchangeAuthAPIDefaultOrEmptyValues = "WARNING -- Exchange %s: Authenticated API support disabled due to default/empty APIKey/Secret/ClientID values." ) type SMSContacts struct { @@ -33,17 +35,18 @@ type Config struct { } type Exchanges struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APIKey string - APISecret string - ClientID string - AvailablePairs string - EnabledPairs string - BaseCurrencies string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APIKey string + APISecret string + ClientID string + AvailablePairs string + EnabledPairs string + BaseCurrencies string } func CheckConfigValues() error { @@ -61,6 +64,19 @@ func CheckConfigValues() error { if exch.BaseCurrencies == "" { return fmt.Errorf(ErrExchangeBaseCurrenciesEmpty, exch.Name) } + if exch.AuthenticatedAPISupport { // non-fatal error + if exch.APIKey == "" || exch.APISecret == "" || exch.APIKey == "Key" || exch.APISecret == "Secret" { + bot.config.Exchanges[i].AuthenticatedAPISupport = false + log.Printf(ErrExchangeAuthAPIDefaultOrEmptyValues, exch.Name) + continue + } else if exch.Name == "ITBIT" || exch.Name == "Bitstamp" || exch.Name == "Coinbase" { + if exch.ClientID == "" || exch.ClientID == "ClientID" { + bot.config.Exchanges[i].AuthenticatedAPISupport = false + log.Printf(ErrExchangeAuthAPIDefaultOrEmptyValues, exch.Name) + continue + } + } + } } } return nil diff --git a/config_example.json b/config_example.json index 04e90dd3..ceab2a56 100644 --- a/config_example.json +++ b/config_example.json @@ -1,186 +1,199 @@ { - "Name": "Skynet", - "SMSGlobalUsername": "Username", - "SMSGlobalPassword": "Password", - "SMSContacts": [ - { - "Name": "Bob", - "Number": "12345", - "Enabled": false - } - ], - "Exchanges": [ - { - "Name": "ANX", - "AvailablePairs": "BTCUSD,BTCHKD,BTCEUR,BTCCAD,BTCAUD,BTCSGD,BTCJPY,BTCGBP,BTCNZD,LTCBTC,DOGEBTC,STRBTC,XRPBTC", - "EnabledPairs": "BTCUSD,BTCHKD,BTCEUR,BTCCAD,BTCAUD,BTCSGD,BTCJPY,BTCGBP,BTCNZD,LTCBTC,DOGEBTC,STRBTC,XRPBTC", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD,HKD,EUR,CAD,AUD,SGD,JPY,GBP,NZD", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "Bitfinex", - "AvailablePairs": "BTCUSD,LTCUSD,DRKUSD", - "EnabledPairs": "BTCUSD,LTCUSD,DRKUSD", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "Bitstamp", - "AvailablePairs": "BTCUSD", - "EnabledPairs": "BTCUSD", - "ClientID": "ClientID", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - }, - { - "Name": "BTC China", - "AvailablePairs": "BTCCNY,LTCCNY,LTCBTC", - "EnabledPairs": "BTCCNY,LTCCNY,LTCBTC", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "CNY", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "BTCE", - "AvailablePairs": "BTCUSD,BTCRUR,BTCEUR,BTCCNH,BTCGBP,LTCBTC,LTCUSD,LTCRUR,LTCEUR,LTCCNH,LTCGBP,NMCBTC,NMCUSD,NVCBTC,NVCUSD,USDRUR,EURUSD,EURRUR,USDCNH,GDPUSD,PPCBTC,PPCUSD", - "EnabledPairs": "BTCUSD,BTCRUR,BTCEUR,BTCCNH,BTCGBP,LTCBTC,LTCUSD,LTCRUR,LTCEUR,LTCCNH,LTCGBP,NMCBTC,NMCUSD,NVCBTC,NVCUSD,USDRUR,EURUSD,EURRUR,USDCNH,GDPUSD,PPCBTC,PPCUSD", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD,RUB,EUR,CNY,GBP", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "BTC Markets", - "AvailablePairs": "LTC,BTC", - "EnabledPairs": "LTC,BTC", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "AUD", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "Coinbase", - "AvailablePairs": "BTCUSD,BTCGBP,BTCEUR", - "EnabledPairs": "BTCUSD,BTCGBP,BTCEUR", - "ClientID": "Password", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD,GBP,EUR", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - }, - { - "Name": "Cryptsy", - "AvailablePairs": "AEROXRP,DBLLTC,GLYPHLTC,GMLBTC,HBNBTC,MNCBTC,MOONXRP,CKCBTC,LGDBTC,PXCLTC,XBSBTC,DMDXRP,ARIBTC,BTCEUR,CINBTC,CLOAKLTC,CRYPTLTC,DGCBTC,DMCLTC,EKNBTC,ICBBTC,NMCBTC,SRCBTC,SXCLTC,SFRBTC,ADTLTC,AGSBTC,DEMXRP,EFLBTC,IOCBTC,PHSBTC,PXCBTC,TITBTC,ZRCBTC,VIABTC,GDCBTC,IFCBTC,JKCBTC,MYRBTC,NBLBTC,STARTBTC,TESBTC,ZEDBTC,ASCLTC,BLKBTC,GLDLTC,LSDBTC,TRCBTC,UROXRP,XPMBTC,SPABTC,BTCUSD,IXCBTC,MNEBTC,MRYBTC,MSTLTC,NXTBTC,PPCXRP,IXCXRP,BENBTC,COLXRP,CRAVEBTC,DGBBTC,EMC2BTC,GMELTC,HALBTC,MECLTC,NMBBTC,NXTXRP,SPAXRP,VRCBTC,UROBTC,CCNBTC,COLLTC,DOGEXRP,KDCBTC,LTCUSD,MINBTC,NXTLTC,DOGEBTC,FSTLTC,IFCXRP,MEMLTC,MYRXRP,PPCLTC,VIAXRP,TESLTC,DEMBTC,DGBXRP,EMC2XRP,IFCLTC,NAUTBTC,NECBTC,RYCBTC,VRCXRP,XAUBTC,NMCXRP,ALFBTC,BTEBTC,CPRLTC,DGCXRP,EACLTC,GLXBTC,ICBXRP,PSEUDBTC,SRCXRP,SUPERLTC,VTCLTC,GLCBTC,ARGBTC,BLKXRP,CLOAKBTC,CRYPTBTC,CYPBTC,DGCLTC,FLOXRP,PYCBTC,SAT2BTC,SXCBTC,TRCXRP,XPMXRP,KGCBTC,LABBTC,MECBTC,RDDUSD,TIXLTC,VRCLTC,EMDBTC,GLYPHBTC,MEDBTC,UTCBTC,LTBXRP,SHLDBTC,XCLTC,SDCBTC,BTBBTC,CATBTC,CKCXRP,CTMLTC,LYCBTC,PPCUSD,RZRLTC,SSVBTC,YBCBTC,AURXRP,NETBTC,SLGXRP,SWIFTBTC,TEKXRP,XSTBTC,TGCBTC,ACOINBTC,AURLTC,BQCBTC,CRCBTC,DOGEUSD,EZCLTC,SBCBTC,XLBBTC,DSBBTC,8BITBTC,ALNBTC,AXRBTC,BCXBTC,BLUBTC,BTMBTC,CADUSD,WBBBTC,EURUSD,JBSBTC,LTCBTC,NETLTC,NVCBTC,SHADEBTC,SYSBTC,UNBXRP,ANCBTC,CAPBTC,CLRXRP,HVCXRP,LKYBTC,MZCBTC,TAGBTC,UNOBTC,WDCBTC,FRKLTC,GUEBTC,KEYBTC,POTBTC,STRBTC,YACBTC,ZETBTC,APEXBTC,BUKBTC,CRACKBTC,MAXBTC,RDDBTC,XAIBTC,SPTBTC,CBXLTC,FRCBTC,LXCBTC,MAXXRP,PTSBTC,RDDXRP,REDLTC,ZRCUSD,EACXRP,HUCBTC,JUDGEXRP,MAXLTC,RDDLTC,TAKBTC,VTCXRP,RPCBTC,CAIxBTC,CAPXRP,CINNIBTC,EACBTC,HTML5XRP,JUDGEBTC,MZCXRP,SUPERBTC,UNOXRP,VTCBTC,WDCXRP,ANCLTC,FLTBTC,FRCXRP,HTML5LTC,NRBBTC,WDCLTC,BATLTC,DVCLTC,FTCLTC,LOTLTC,LTCDBTC,SLGBTC,AURBTC,CRAIGBTC,EXEBTC,EZCBTC,KEYXRP,POTXRP,SBCLTC,TEKBTC,XXXBTC,YACXRP,ZCCBTC,ZETXRP,UNBBTC,BETBTC,BTBXRP,CBXBTC,CLRBTC,HVCBTC,NXTUSD,OSCBTC,VDOBTC,XJOBTC,LTBBTC,RZRBTC,XRPBTC,LTCXBTC,NANBTC,NETXRP,BTCDBTC,SOLEBTC,WCXRP,DRKCBTC,MINTBTC,NYANLTC,BITBBTC,KARMLTC,FIBREBTC,XCBTC,ACBTC,DASHBTC,CASHBTC,DASHXRP,NAVBTC,ZEITXRP,DASHLTC,DVCXRP,EXCLBTC,FTCXRP,OPALBTC,ZEITLTC,XPYBTC,AMCBTC,BTGBTC,CENTXRP,CSCBTC,DVCBTC,FTCBTC,TIPSXRP,DTBTC,FLAPXRP,FRACBTC,NAVXRP,TIPSLTC,ULTCBTC,ELPLTC,MINTXRP,NYANBTC,WCBTC,XCXRP,COOLBTC,FLAPLTC,NOBLBTC,ALNXRP,BLUXRP,LTCXRP,NVCXRP,SYSXRP,XCRBTC,BLKLTC,CMCBTC,DMDBTC,FLOLTC,GLDBTC,NRSBTC,TORBTC,XPMLTC,BTCDXRP,KARMXRP,QRKBTC,RT2BTC,42XRP,AEROBTC,GBBTC,XBOTBTC,XCASHBTC,BOSTBTC,FTCUSD,RBBTLTC,XPYUSD,DIMELTC,MNBTC,MOONLTC,SYNCBTC,DOGEDBTC,FC2BTC,LTCXLTC,MONABTC,MYSTBTC,XRPUSD,CNCBTC,COMMBTC,ELCBTC,UTILBTC,007BTC,CACHBTC,CNCXRP,LEAFXRP,TRONBTC,CNCLTC,LEAFLTC,BNCRBTC,SILKBTC,BTCCAD,CANNBTC,LK7BTC,VOOTBTC,DOGELTC,FFCBTC,FSTBTC,HYPBTC,ORBBTC,PPCBTC,TTCBTC,42BTC,MEOWLTC,NTRNBTC,CLAMBTC,CNLBTC,DASHUSD,QRKXRP,ARCHBTC,QRKLTC,RIPOBTC,XNCLTC,FRKBTC,GUELTC,PointsBTC,SLINGBTC,SMCBTC,USDeBTC,UTCXRP,YACLTC,ZETLTC", - "EnabledPairs": "AEROXRP,DBLLTC,GLYPHLTC,GMLBTC,HBNBTC,MNCBTC,MOONXRP,CKCBTC,LGDBTC,PXCLTC,XBSBTC,DMDXRP,ARIBTC,BTCEUR,CINBTC,CLOAKLTC,CRYPTLTC,DGCBTC,DMCLTC,EKNBTC,ICBBTC,NMCBTC,SRCBTC,SXCLTC,SFRBTC,ADTLTC,AGSBTC,DEMXRP,EFLBTC,IOCBTC,PHSBTC,PXCBTC,TITBTC,ZRCBTC,VIABTC,GDCBTC,IFCBTC,JKCBTC,MYRBTC,NBLBTC,STARTBTC,TESBTC,ZEDBTC,ASCLTC,BLKBTC,GLDLTC,LSDBTC,TRCBTC,UROXRP,XPMBTC,SPABTC,BTCUSD,IXCBTC,MNEBTC,MRYBTC,MSTLTC,NXTBTC,PPCXRP,IXCXRP,BENBTC,COLXRP,CRAVEBTC,DGBBTC,EMC2BTC,GMELTC,HALBTC,MECLTC,NMBBTC,NXTXRP,SPAXRP,VRCBTC,UROBTC,CCNBTC,COLLTC,DOGEXRP,KDCBTC,LTCUSD,MINBTC,NXTLTC,DOGEBTC,FSTLTC,IFCXRP,MEMLTC,MYRXRP,PPCLTC,VIAXRP,TESLTC,DEMBTC,DGBXRP,EMC2XRP,IFCLTC,NAUTBTC,NECBTC,RYCBTC,VRCXRP,XAUBTC,NMCXRP,ALFBTC,BTEBTC,CPRLTC,DGCXRP,EACLTC,GLXBTC,ICBXRP,PSEUDBTC,SRCXRP,SUPERLTC,VTCLTC,GLCBTC,ARGBTC,BLKXRP,CLOAKBTC,CRYPTBTC,CYPBTC,DGCLTC,FLOXRP,PYCBTC,SAT2BTC,SXCBTC,TRCXRP,XPMXRP,KGCBTC,LABBTC,MECBTC,RDDUSD,TIXLTC,VRCLTC,EMDBTC,GLYPHBTC,MEDBTC,UTCBTC,LTBXRP,SHLDBTC,XCLTC,SDCBTC,BTBBTC,CATBTC,CKCXRP,CTMLTC,LYCBTC,PPCUSD,RZRLTC,SSVBTC,YBCBTC,AURXRP,NETBTC,SLGXRP,SWIFTBTC,TEKXRP,XSTBTC,TGCBTC,ACOINBTC,AURLTC,BQCBTC,CRCBTC,DOGEUSD,EZCLTC,SBCBTC,XLBBTC,DSBBTC,8BITBTC,ALNBTC,AXRBTC,BCXBTC,BLUBTC,BTMBTC,CADUSD,WBBBTC,EURUSD,JBSBTC,LTCBTC,NETLTC,NVCBTC,SHADEBTC,SYSBTC,UNBXRP,ANCBTC,CAPBTC,CLRXRP,HVCXRP,LKYBTC,MZCBTC,TAGBTC,UNOBTC,WDCBTC,FRKLTC,GUEBTC,KEYBTC,POTBTC,STRBTC,YACBTC,ZETBTC,APEXBTC,BUKBTC,CRACKBTC,MAXBTC,RDDBTC,XAIBTC,SPTBTC,CBXLTC,FRCBTC,LXCBTC,MAXXRP,PTSBTC,RDDXRP,REDLTC,ZRCUSD,EACXRP,HUCBTC,JUDGEXRP,MAXLTC,RDDLTC,TAKBTC,VTCXRP,RPCBTC,CAIxBTC,CAPXRP,CINNIBTC,EACBTC,HTML5XRP,JUDGEBTC,MZCXRP,SUPERBTC,UNOXRP,VTCBTC,WDCXRP,ANCLTC,FLTBTC,FRCXRP,HTML5LTC,NRBBTC,WDCLTC,BATLTC,DVCLTC,FTCLTC,LOTLTC,LTCDBTC,SLGBTC,AURBTC,CRAIGBTC,EXEBTC,EZCBTC,KEYXRP,POTXRP,SBCLTC,TEKBTC,XXXBTC,YACXRP,ZCCBTC,ZETXRP,UNBBTC,BETBTC,BTBXRP,CBXBTC,CLRBTC,HVCBTC,NXTUSD,OSCBTC,VDOBTC,XJOBTC,LTBBTC,RZRBTC,XRPBTC,LTCXBTC,NANBTC,NETXRP,BTCDBTC,SOLEBTC,WCXRP,DRKCBTC,MINTBTC,NYANLTC,BITBBTC,KARMLTC,FIBREBTC,XCBTC,ACBTC,DASHBTC,CASHBTC,DASHXRP,NAVBTC,ZEITXRP,DASHLTC,DVCXRP,EXCLBTC,FTCXRP,OPALBTC,ZEITLTC,XPYBTC,AMCBTC,BTGBTC,CENTXRP,CSCBTC,DVCBTC,FTCBTC,TIPSXRP,DTBTC,FLAPXRP,FRACBTC,NAVXRP,TIPSLTC,ULTCBTC,ELPLTC,MINTXRP,NYANBTC,WCBTC,XCXRP,COOLBTC,FLAPLTC,NOBLBTC,ALNXRP,BLUXRP,LTCXRP,NVCXRP,SYSXRP,XCRBTC,BLKLTC,CMCBTC,DMDBTC,FLOLTC,GLDBTC,NRSBTC,TORBTC,XPMLTC,BTCDXRP,KARMXRP,QRKBTC,RT2BTC,42XRP,AEROBTC,GBBTC,XBOTBTC,XCASHBTC,BOSTBTC,FTCUSD,RBBTLTC,XPYUSD,DIMELTC,MNBTC,MOONLTC,SYNCBTC,DOGEDBTC,FC2BTC,LTCXLTC,MONABTC,MYSTBTC,XRPUSD,CNCBTC,COMMBTC,ELCBTC,UTILBTC,007BTC,CACHBTC,CNCXRP,LEAFXRP,TRONBTC,CNCLTC,LEAFLTC,BNCRBTC,SILKBTC,BTCCAD,CANNBTC,LK7BTC,VOOTBTC,DOGELTC,FFCBTC,FSTBTC,HYPBTC,ORBBTC,PPCBTC,TTCBTC,42BTC,MEOWLTC,NTRNBTC,CLAMBTC,CNLBTC,DASHUSD,QRKXRP,ARCHBTC,QRKLTC,RIPOBTC,XNCLTC,FRKBTC,GUELTC,PointsBTC,SLINGBTC,SMCBTC,USDeBTC,UTCXRP,YACLTC,ZETLTC", - "ClientID": "Password", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - }, - { - "Name": "Huobi", - "AvailablePairs": "BTCCNY,LTCCNY", - "EnabledPairs": "BTCCNY,LTCCNY", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "CNY", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "ITBIT", - "AvailablePairs": "XBTUSD,XBTSGD,XBTEUR", - "EnabledPairs": "XBTUSD,XBTSGD,XBTEUR", - "APIKey": "Key", - "APISecret": "Secret", - "ClientID": "ClientID", - "BaseCurrencies": "USD,SGD,EUR", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "Kraken", - "AvailablePairs": "XBTEUR,XBTUSD,XBTGBP,XBTJPY,LTCEUR,LTCUSD,EURXVN,USDXVN,XBTLTC,XBTNMC,XBTSTR,XBTXDG,XBTXRP,XBTXVN", - "EnabledPairs": "XBTEUR,XBTUSD,XBTGBP,XBTJPY,LTCEUR,LTCUSD,EURXVN,USDXVN,XBTLTC,XBTNMC,XBTSTR,XBTXDG,XBTXRP,XBTXVN", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "EUR,USD,GBP,JPY", - "Enabled": true, - "Verbose": false, - "Websocket": false, - "RESTPollingDelay": 10 - }, - { - "Name": "LakeBTC", - "AvailablePairs": "BTCUSD,BTCCNY", - "EnabledPairs": "BTCUSD,BTCCNY", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD,CNY,SEK", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - }, - { - "Name": "OKCOIN China", - "AvailablePairs": "BTCCNY,LTCCNY", - "EnabledPairs": "BTCCNY,LTCCNY", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "CNY", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - }, - { - "Name": "OKCOIN International", - "AvailablePairs": "BTCUSD,LTCUSD", - "EnabledPairs": "BTCUSD,LTCUSD", - "APIKey": "Key", - "APISecret": "Secret", - "BaseCurrencies": "USD", - "Enabled": true, - "Verbose": false, - "Websocket": true, - "RESTPollingDelay": 10 - } - ] + "Name": "Skynet", + "SMSGlobalUsername": "Username", + "SMSGlobalPassword": "Password", + "SMSContacts": [ + { + "Name": "Bob", + "Number": "12345", + "Enabled": false + } + ], + "Exchanges": [ + { + "Name": "ANX", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCUSD,BTCHKD,BTCEUR,BTCCAD,BTCAUD,BTCSGD,BTCJPY,BTCGBP,BTCNZD,LTCBTC,DOGEBTC,STRBTC,XRPBTC", + "EnabledPairs": "BTCUSD,BTCHKD,BTCEUR,BTCCAD,BTCAUD,BTCSGD,BTCJPY,BTCGBP,BTCNZD,LTCBTC,DOGEBTC,STRBTC,XRPBTC", + "BaseCurrencies": "USD,HKD,EUR,CAD,AUD,SGD,JPY,GBP,NZD" + }, + { + "Name": "Bitfinex", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCUSD,LTCUSD,DRKUSD", + "EnabledPairs": "BTCUSD,LTCUSD,DRKUSD", + "BaseCurrencies": "USD" + }, + { + "Name": "Bitstamp", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "ClientID": "ClientID", + "AvailablePairs": "BTCUSD", + "EnabledPairs": "BTCUSD", + "BaseCurrencies": "USD" + }, + { + "Name": "BTC China", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCCNY,LTCCNY,LTCBTC", + "EnabledPairs": "BTCCNY,LTCCNY,LTCBTC", + "BaseCurrencies": "CNY" + }, + { + "Name": "BTCE", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCUSD,BTCRUR,BTCEUR,BTCCNH,BTCGBP,LTCBTC,LTCUSD,LTCRUR,LTCEUR,LTCCNH,LTCGBP,NMCBTC,NMCUSD,NVCBTC,NVCUSD,USDRUR,EURUSD,EURRUR,USDCNH,GDPUSD,PPCBTC,PPCUSD", + "EnabledPairs": "BTCUSD,BTCRUR,BTCEUR,BTCCNH,BTCGBP,LTCBTC,LTCUSD,LTCRUR,LTCEUR,LTCCNH,LTCGBP,NMCBTC,NMCUSD,NVCBTC,NVCUSD,USDRUR,EURUSD,EURRUR,USDCNH,GDPUSD,PPCBTC,PPCUSD", + "BaseCurrencies": "USD,RUB,EUR,CNY,GBP" + }, + { + "Name": "BTC Markets", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "LTC,BTC", + "EnabledPairs": "LTC,BTC", + "BaseCurrencies": "AUD" + }, + { + "Name": "Coinbase", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "ClientID": "ClientID", + "AvailablePairs": "BTCUSD,BTCGBP,BTCEUR", + "EnabledPairs": "BTCUSD,BTCGBP,BTCEUR", + "BaseCurrencies": "USD,GBP,EUR" + }, + { + "Name": "Cryptsy", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "AEROXRP,DBLLTC,GLYPHLTC,GMLBTC,HBNBTC,MNCBTC,MOONXRP,CKCBTC,LGDBTC,PXCLTC,XBSBTC,DMDXRP,ARIBTC,BTCEUR,CINBTC,CLOAKLTC,CRYPTLTC,DGCBTC,DMCLTC,EKNBTC,ICBBTC,NMCBTC,SRCBTC,SXCLTC,SFRBTC,ADTLTC,AGSBTC,DEMXRP,EFLBTC,IOCBTC,PHSBTC,PXCBTC,TITBTC,ZRCBTC,VIABTC,GDCBTC,IFCBTC,JKCBTC,MYRBTC,NBLBTC,STARTBTC,TESBTC,ZEDBTC,ASCLTC,BLKBTC,GLDLTC,LSDBTC,TRCBTC,UROXRP,XPMBTC,SPABTC,BTCUSD,IXCBTC,MNEBTC,MRYBTC,MSTLTC,NXTBTC,PPCXRP,IXCXRP,BENBTC,COLXRP,CRAVEBTC,DGBBTC,EMC2BTC,GMELTC,HALBTC,MECLTC,NMBBTC,NXTXRP,SPAXRP,VRCBTC,UROBTC,CCNBTC,COLLTC,DOGEXRP,KDCBTC,LTCUSD,MINBTC,NXTLTC,DOGEBTC,FSTLTC,IFCXRP,MEMLTC,MYRXRP,PPCLTC,VIAXRP,TESLTC,DEMBTC,DGBXRP,EMC2XRP,IFCLTC,NAUTBTC,NECBTC,RYCBTC,VRCXRP,XAUBTC,NMCXRP,ALFBTC,BTEBTC,CPRLTC,DGCXRP,EACLTC,GLXBTC,ICBXRP,PSEUDBTC,SRCXRP,SUPERLTC,VTCLTC,GLCBTC,ARGBTC,BLKXRP,CLOAKBTC,CRYPTBTC,CYPBTC,DGCLTC,FLOXRP,PYCBTC,SAT2BTC,SXCBTC,TRCXRP,XPMXRP,KGCBTC,LABBTC,MECBTC,RDDUSD,TIXLTC,VRCLTC,EMDBTC,GLYPHBTC,MEDBTC,UTCBTC,LTBXRP,SHLDBTC,XCLTC,SDCBTC,BTBBTC,CATBTC,CKCXRP,CTMLTC,LYCBTC,PPCUSD,RZRLTC,SSVBTC,YBCBTC,AURXRP,NETBTC,SLGXRP,SWIFTBTC,TEKXRP,XSTBTC,TGCBTC,ACOINBTC,AURLTC,BQCBTC,CRCBTC,DOGEUSD,EZCLTC,SBCBTC,XLBBTC,DSBBTC,8BITBTC,ALNBTC,AXRBTC,BCXBTC,BLUBTC,BTMBTC,CADUSD,WBBBTC,EURUSD,JBSBTC,LTCBTC,NETLTC,NVCBTC,SHADEBTC,SYSBTC,UNBXRP,ANCBTC,CAPBTC,CLRXRP,HVCXRP,LKYBTC,MZCBTC,TAGBTC,UNOBTC,WDCBTC,FRKLTC,GUEBTC,KEYBTC,POTBTC,STRBTC,YACBTC,ZETBTC,APEXBTC,BUKBTC,CRACKBTC,MAXBTC,RDDBTC,XAIBTC,SPTBTC,CBXLTC,FRCBTC,LXCBTC,MAXXRP,PTSBTC,RDDXRP,REDLTC,ZRCUSD,EACXRP,HUCBTC,JUDGEXRP,MAXLTC,RDDLTC,TAKBTC,VTCXRP,RPCBTC,CAIxBTC,CAPXRP,CINNIBTC,EACBTC,HTML5XRP,JUDGEBTC,MZCXRP,SUPERBTC,UNOXRP,VTCBTC,WDCXRP,ANCLTC,FLTBTC,FRCXRP,HTML5LTC,NRBBTC,WDCLTC,BATLTC,DVCLTC,FTCLTC,LOTLTC,LTCDBTC,SLGBTC,AURBTC,CRAIGBTC,EXEBTC,EZCBTC,KEYXRP,POTXRP,SBCLTC,TEKBTC,XXXBTC,YACXRP,ZCCBTC,ZETXRP,UNBBTC,BETBTC,BTBXRP,CBXBTC,CLRBTC,HVCBTC,NXTUSD,OSCBTC,VDOBTC,XJOBTC,LTBBTC,RZRBTC,XRPBTC,LTCXBTC,NANBTC,NETXRP,BTCDBTC,SOLEBTC,WCXRP,DRKCBTC,MINTBTC,NYANLTC,BITBBTC,KARMLTC,FIBREBTC,XCBTC,ACBTC,DASHBTC,CASHBTC,DASHXRP,NAVBTC,ZEITXRP,DASHLTC,DVCXRP,EXCLBTC,FTCXRP,OPALBTC,ZEITLTC,XPYBTC,AMCBTC,BTGBTC,CENTXRP,CSCBTC,DVCBTC,FTCBTC,TIPSXRP,DTBTC,FLAPXRP,FRACBTC,NAVXRP,TIPSLTC,ULTCBTC,ELPLTC,MINTXRP,NYANBTC,WCBTC,XCXRP,COOLBTC,FLAPLTC,NOBLBTC,ALNXRP,BLUXRP,LTCXRP,NVCXRP,SYSXRP,XCRBTC,BLKLTC,CMCBTC,DMDBTC,FLOLTC,GLDBTC,NRSBTC,TORBTC,XPMLTC,BTCDXRP,KARMXRP,QRKBTC,RT2BTC,42XRP,AEROBTC,GBBTC,XBOTBTC,XCASHBTC,BOSTBTC,FTCUSD,RBBTLTC,XPYUSD,DIMELTC,MNBTC,MOONLTC,SYNCBTC,DOGEDBTC,FC2BTC,LTCXLTC,MONABTC,MYSTBTC,XRPUSD,CNCBTC,COMMBTC,ELCBTC,UTILBTC,007BTC,CACHBTC,CNCXRP,LEAFXRP,TRONBTC,CNCLTC,LEAFLTC,BNCRBTC,SILKBTC,BTCCAD,CANNBTC,LK7BTC,VOOTBTC,DOGELTC,FFCBTC,FSTBTC,HYPBTC,ORBBTC,PPCBTC,TTCBTC,42BTC,MEOWLTC,NTRNBTC,CLAMBTC,CNLBTC,DASHUSD,QRKXRP,ARCHBTC,QRKLTC,RIPOBTC,XNCLTC,FRKBTC,GUELTC,PointsBTC,SLINGBTC,SMCBTC,USDeBTC,UTCXRP,YACLTC,ZETLTC", + "EnabledPairs": "BTCUSD,LTCUSD,DASHBTC,DOGEBTC", + "BaseCurrencies": "USD" + }, + { + "Name": "Huobi", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCCNY,LTCCNY", + "EnabledPairs": "BTCCNY,LTCCNY", + "BaseCurrencies": "CNY" + }, + { + "Name": "ITBIT", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "ClientID": "ClientID", + "AvailablePairs": "XBTUSD,XBTSGD,XBTEUR", + "EnabledPairs": "XBTUSD,XBTSGD,XBTEUR", + "BaseCurrencies": "USD,SGD,EUR" + }, + { + "Name": "Kraken", + "Enabled": true, + "Verbose": false, + "Websocket": false, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "XBTEUR,XBTUSD,XBTGBP,XBTJPY,LTCEUR,LTCUSD,EURXVN,USDXVN,XBTLTC,XBTNMC,XBTSTR,XBTXDG,XBTXRP,XBTXVN", + "EnabledPairs": "XBTEUR,XBTUSD,XBTGBP,XBTJPY,LTCEUR,LTCUSD,EURXVN,USDXVN,XBTLTC,XBTNMC,XBTSTR,XBTXDG,XBTXRP,XBTXVN", + "BaseCurrencies": "EUR,USD,GBP,JPY" + }, + { + "Name": "LakeBTC", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCUSD,BTCCNY", + "EnabledPairs": "BTCUSD,BTCCNY", + "BaseCurrencies": "USD,CNY,SEK" + }, + { + "Name": "OKCOIN China", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCCNY,LTCCNY", + "EnabledPairs": "BTCCNY,LTCCNY", + "BaseCurrencies": "CNY" + }, + { + "Name": "OKCOIN International", + "Enabled": true, + "Verbose": false, + "Websocket": true, + "RESTPollingDelay": 10, + "AuthenticatedAPISupport": false, + "APIKey": "Key", + "APISecret": "Secret", + "AvailablePairs": "BTCUSD,LTCUSD", + "EnabledPairs": "BTCUSD,LTCUSD", + "BaseCurrencies": "USD" + } + ] } \ No newline at end of file diff --git a/cryptsyhttp.go b/cryptsyhttp.go index c728a8ae..73d78a85 100644 --- a/cryptsyhttp.go +++ b/cryptsyhttp.go @@ -32,20 +32,21 @@ const ( ) type Cryptsy struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - APIKey, APISecret string - TakerFee, MakerFee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string - Market map[string]CryptsyMarket - Ticker map[string]CryptsyTicker - Volume map[string]CryptsyVolume - Currencies map[string]CryptsyCurrency + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + APIKey, APISecret string + TakerFee, MakerFee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string + Market map[string]CryptsyMarket + Ticker map[string]CryptsyTicker + Volume map[string]CryptsyVolume + Currencies map[string]CryptsyCurrency } type CryptsyMarket struct { diff --git a/huobihttp.go b/huobihttp.go index 86d64d95..f1ea9ba2 100644 --- a/huobihttp.go +++ b/huobihttp.go @@ -15,16 +15,17 @@ const ( ) type HUOBI struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - AccessKey, SecretKey string - Fee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + AccessKey, SecretKey string + Fee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } type HuobiTicker struct { diff --git a/itbithttp.go b/itbithttp.go index 92511fe8..b5af68fa 100644 --- a/itbithttp.go +++ b/itbithttp.go @@ -20,6 +20,7 @@ type ItBit struct { Verbose bool Websocket bool RESTPollingDelay time.Duration + AuthenticatedAPISupport bool ClientKey, APISecret, UserID string MakerFee, TakerFee float64 BaseCurrencies []string diff --git a/kraken.go b/kraken.go index b0212a9a..ac8c03c9 100644 --- a/kraken.go +++ b/kraken.go @@ -37,17 +37,18 @@ const ( ) type Kraken struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - ClientKey, APISecret string - FiatFee, CryptoFee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string - Ticker map[string]KrakenTicker + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + ClientKey, APISecret string + FiatFee, CryptoFee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string + Ticker map[string]KrakenTicker } func (k *Kraken) SetDefaults() { diff --git a/lakebtchttp.go b/lakebtchttp.go index 04604d11..cbbf1561 100644 --- a/lakebtchttp.go +++ b/lakebtchttp.go @@ -25,16 +25,17 @@ const ( ) type LakeBTC struct { - Name string - Enabled bool - Verbose bool - Websocket bool - RESTPollingDelay time.Duration - Email, APISecret string - TakerFee, MakerFee float64 - BaseCurrencies []string - AvailablePairs []string - EnabledPairs []string + Name string + Enabled bool + Verbose bool + Websocket bool + RESTPollingDelay time.Duration + AuthenticatedAPISupport bool + Email, APISecret string + TakerFee, MakerFee float64 + BaseCurrencies []string + AvailablePairs []string + EnabledPairs []string } type LakeBTCTicker struct { diff --git a/main.go b/main.go index 2ef57767..1edc50fc 100644 --- a/main.go +++ b/main.go @@ -114,11 +114,17 @@ func main() { } for _, exch := range bot.config.Exchanges { + if exch.Enabled { + log.Printf("%s: Exchange support: %s (Authenticated API support: %s - Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.AuthenticatedAPISupport), IsEnabled(exch.Verbose)) + } else { + log.Printf("%s: Exchange support: %s\n", exch.Name, IsEnabled(exch.Enabled)) + } + if bot.exchange.anx.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.anx.SetEnabled(false) } else { + bot.exchange.anx.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.anx.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.anx.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.anx.Verbose = exch.Verbose @@ -129,10 +135,10 @@ func main() { go bot.exchange.anx.Run() } } else if bot.exchange.btcchina.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.btcchina.SetEnabled(false) } else { + bot.exchange.btcchina.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.btcchina.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.btcchina.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.btcchina.Verbose = exch.Verbose @@ -143,10 +149,10 @@ func main() { go bot.exchange.btcchina.Run() } } else if bot.exchange.bitstamp.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.bitstamp.SetEnabled(false) } else { + bot.exchange.bitstamp.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.bitstamp.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) bot.exchange.bitstamp.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.bitstamp.Verbose = exch.Verbose @@ -157,10 +163,10 @@ func main() { go bot.exchange.bitstamp.Run() } } else if bot.exchange.bitfinex.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.bitfinex.SetEnabled(false) } else { + bot.exchange.bitfinex.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.bitfinex.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.bitfinex.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.bitfinex.Verbose = exch.Verbose @@ -171,10 +177,10 @@ func main() { go bot.exchange.bitfinex.Run() } } else if bot.exchange.btce.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.btce.SetEnabled(false) } else { + bot.exchange.btce.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.btce.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.btce.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.btce.Verbose = exch.Verbose @@ -185,10 +191,10 @@ func main() { go bot.exchange.btce.Run() } } else if bot.exchange.btcmarkets.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.btcmarkets.SetEnabled(false) } else { + bot.exchange.btcmarkets.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.btcmarkets.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.btcmarkets.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.btcmarkets.Verbose = exch.Verbose @@ -199,10 +205,10 @@ func main() { go bot.exchange.btcmarkets.Run() } } else if bot.exchange.coinbase.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.coinbase.SetEnabled(false) } else { + bot.exchange.coinbase.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.coinbase.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) bot.exchange.coinbase.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.coinbase.Verbose = exch.Verbose @@ -213,10 +219,10 @@ func main() { go bot.exchange.coinbase.Run() } } else if bot.exchange.cryptsy.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.cryptsy.SetEnabled(false) } else { + bot.exchange.cryptsy.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.cryptsy.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.cryptsy.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.cryptsy.Verbose = exch.Verbose @@ -227,10 +233,10 @@ func main() { go bot.exchange.cryptsy.Run() } } else if bot.exchange.okcoinChina.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.okcoinChina.SetEnabled(false) } else { + bot.exchange.okcoinChina.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.okcoinChina.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.okcoinChina.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.okcoinChina.Verbose = exch.Verbose @@ -241,10 +247,10 @@ func main() { go bot.exchange.okcoinChina.Run() } } else if bot.exchange.okcoinIntl.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.okcoinIntl.SetEnabled(false) } else { + bot.exchange.okcoinIntl.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.okcoinIntl.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.okcoinIntl.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.okcoinIntl.Verbose = exch.Verbose @@ -255,10 +261,10 @@ func main() { go bot.exchange.okcoinIntl.Run() } } else if bot.exchange.itbit.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.itbit.SetEnabled(false) } else { + bot.exchange.itbit.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.itbit.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) bot.exchange.itbit.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.itbit.Verbose = exch.Verbose @@ -269,10 +275,10 @@ func main() { go bot.exchange.itbit.Run() } } else if bot.exchange.kraken.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.kraken.SetEnabled(false) } else { + bot.exchange.kraken.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.kraken.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.kraken.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.kraken.Verbose = exch.Verbose @@ -283,10 +289,10 @@ func main() { go bot.exchange.kraken.Run() } } else if bot.exchange.lakebtc.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.lakebtc.SetEnabled(false) } else { + bot.exchange.lakebtc.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.lakebtc.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.lakebtc.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.lakebtc.Verbose = exch.Verbose @@ -297,10 +303,10 @@ func main() { go bot.exchange.lakebtc.Run() } } else if bot.exchange.huobi.GetName() == exch.Name { - log.Printf("%s: %s (Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.Verbose)) if !exch.Enabled { bot.exchange.huobi.SetEnabled(false) } else { + bot.exchange.huobi.AuthenticatedAPISupport = exch.AuthenticatedAPISupport bot.exchange.huobi.SetAPIKeys(exch.APIKey, exch.APISecret) bot.exchange.huobi.RESTPollingDelay = exch.RESTPollingDelay bot.exchange.huobi.Verbose = exch.Verbose diff --git a/okcoinhttp.go b/okcoinhttp.go index f058e159..779d80f5 100644 --- a/okcoinhttp.go +++ b/okcoinhttp.go @@ -24,6 +24,7 @@ type OKCoin struct { Websocket bool WebsocketURL string RESTPollingDelay time.Duration + AuthenticatedAPISupport bool APIUrl, PartnerID, SecretKey string TakerFee, MakerFee float64 RESTErrors map[string]string diff --git a/okcoinwebsocket.go b/okcoinwebsocket.go index 90be0a33..2c84a1a8 100644 --- a/okcoinwebsocket.go +++ b/okcoinwebsocket.go @@ -412,21 +412,28 @@ func (o *OKCoin) WebsocketClient() { } OKConnWebsocket.SetPingHandler(o.PingHandler) - if o.WebsocketURL == OKCOIN_WEBSOCKET_URL { - o.AddChannelAuthenticated(OKCOIN_WEBSOCKET_FUTURES_REALTRADES, map[string]string{}) - o.AddChannelAuthenticated(OKCOIN_WEBSOCKET_FUTURES_USERINFO, map[string]string{}) + + if o.AuthenticatedAPISupport { + if o.WebsocketURL == OKCOIN_WEBSOCKET_URL { + o.AddChannelAuthenticated(OKCOIN_WEBSOCKET_FUTURES_REALTRADES, map[string]string{}) + o.AddChannelAuthenticated(OKCOIN_WEBSOCKET_FUTURES_USERINFO, map[string]string{}) + } + o.AddChannelAuthenticated(currencyChan, map[string]string{}) + o.AddChannelAuthenticated(userinfoChan, map[string]string{}) } - o.AddChannelAuthenticated(currencyChan, map[string]string{}) - o.AddChannelAuthenticated(userinfoChan, map[string]string{}) for _, x := range o.EnabledPairs { currency := StringToLower(x) currencyUL := currency[0:3] + "_" + currency[3:] - o.WebsocketSpotOrderInfo(currencyUL, -1) + if o.AuthenticatedAPISupport { + o.WebsocketSpotOrderInfo(currencyUL, -1) + } if o.WebsocketURL == OKCOIN_WEBSOCKET_URL { o.AddChannel(fmt.Sprintf("ok_%s_future_index", currency)) for _, y := range o.FuturesValues { - o.WebsocketFuturesOrderInfo(currencyUL, y, -1, 1, 1, 50) + if o.AuthenticatedAPISupport { + o.WebsocketFuturesOrderInfo(currencyUL, y, -1, 1, 1, 50) + } o.AddChannel(fmt.Sprintf("ok_%s_future_ticker_%s", currency, y)) o.AddChannel(fmt.Sprintf("ok_%s_future_depth_%s_60", currency, y)) o.AddChannel(fmt.Sprintf("ok_%s_future_trade_v1_%s", currency, y))