diff --git a/exchanges/bitstamp/bitstamp.go b/exchanges/bitstamp/bitstamp.go index e391ec5384e..7328871c310 100644 --- a/exchanges/bitstamp/bitstamp.go +++ b/exchanges/bitstamp/bitstamp.go @@ -46,6 +46,7 @@ const ( bitstampAPIXrpWithdrawal = "xrp_withdrawal" bitstampAPIXrpDeposit = "xrp_address" bitstampAPIReturnType = "string" + bitstampAPITradingPairsInfo = "trading-pairs-info" ) // Bitstamp is the overarching type across the bitstamp package @@ -188,6 +189,14 @@ func (b *Bitstamp) GetOrderbook(currency string) (Orderbook, error) { return orderbook, nil } +// GetTradingPairs returns a list of trading pairs which Bitstamp +// currently supports +func (b *Bitstamp) GetTradingPairs() ([]TradingPair, error) { + var result []TradingPair + path := fmt.Sprintf("%s/v%s/%s", bitstampAPIURL, bitstampAPIVersion, bitstampAPITradingPairsInfo) + return result, common.SendHTTPGetRequest(path, true, b.Verbose, &result) +} + // GetTransactions returns transaction information // value paramater ["time"] = "minute", "hour", "day" will collate your // response into time intervals. Implementation of value in test code. diff --git a/exchanges/bitstamp/bitstamp_test.go b/exchanges/bitstamp/bitstamp_test.go index 3eb2ad3d1e9..8911c6d5fa6 100644 --- a/exchanges/bitstamp/bitstamp_test.go +++ b/exchanges/bitstamp/bitstamp_test.go @@ -110,6 +110,15 @@ func TestGetOrderbook(t *testing.T) { } } +func TestGetTradingPairs(t *testing.T) { + t.Parallel() + b := Bitstamp{} + _, err := b.GetTradingPairs() + if err != nil { + t.Error("Test Failed - GetTradingPairs() error", err) + } +} + func TestGetTransactions(t *testing.T) { t.Parallel() b := Bitstamp{} diff --git a/exchanges/bitstamp/bitstamp_types.go b/exchanges/bitstamp/bitstamp_types.go index d029b62f414..af376d78386 100644 --- a/exchanges/bitstamp/bitstamp_types.go +++ b/exchanges/bitstamp/bitstamp_types.go @@ -26,6 +26,17 @@ type Orderbook struct { Asks []OrderbookBase } +// TradingPair holds trading pair information +type TradingPair struct { + Name string `json:"name"` + URLSymbol string `json:"url_symbol"` + BaseDecimals int `json:"base_decimals"` + CounterDecimals int `json:"counter_decimals"` + MinimumOrder string `json:"minimum_order"` + Trading string `json:"trading"` + Description string `json:"description"` +} + // Transactions holds transaction data type Transactions struct { Date int64 `json:"date,string"` diff --git a/exchanges/bitstamp/bitstamp_wrapper.go b/exchanges/bitstamp/bitstamp_wrapper.go index 4798226de52..661783260b0 100644 --- a/exchanges/bitstamp/bitstamp_wrapper.go +++ b/exchanges/bitstamp/bitstamp_wrapper.go @@ -3,6 +3,7 @@ package bitstamp import ( "errors" "log" + "strings" "github.com/thrasher-/gocryptotrader/common" "github.com/thrasher-/gocryptotrader/currency/pair" @@ -27,6 +28,24 @@ func (b *Bitstamp) Run() { if b.Websocket { go b.PusherClient() } + + pairs, err := b.GetTradingPairs() + if err != nil { + log.Printf("%s failed to get trading pairs. Err: %s", b.Name, err) + } else { + var currencies []string + for x := range pairs { + if pairs[x].Trading != "Enabled" { + continue + } + pair := strings.Split(pairs[x].Name, "/") + currencies = append(currencies, pair[0]+pair[1]) + } + err = b.UpdateAvailableCurrencies(currencies, false) + if err != nil { + log.Printf("%s Failed to update available currencies.\n", b.Name) + } + } } // UpdateTicker updates and returns the ticker for a currency pair