mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-04 07:26:47 +00:00
exchanges: Initial context propagation (#744)
* gct: phase one context awareness pass * exchanges: context propagation pass * common/requester: force context requirement * gctcli/exchanges: linter fix * rpcserver: fix test using dummy rpc server * backtester: fix comments * grpc: add correct cancel and timeout for commands * rpcserver_test: add comment on dummy server * common: deprecated SendHTTPGetRequest * linter: fix * linter: turn on no context check * apichecker: fix context linter issue * binance: use param context * common: remove checks as this gets executed before main * common: change mutex to RW as clients can be used by multiple go routines. * common: remove init and JIT default client. Unexport global variables and add protection. * common: Add comments * bithumb: after dinner mints fix
This commit is contained in:
@@ -57,27 +57,27 @@ const (
|
||||
)
|
||||
|
||||
// FetchFundingHistory gets funding history
|
||||
func (b *BTSE) FetchFundingHistory(symbol string) (map[string][]FundingHistoryData, error) {
|
||||
func (b *BTSE) FetchFundingHistory(ctx context.Context, symbol string) (map[string][]FundingHistoryData, error) {
|
||||
var resp map[string][]FundingHistoryData
|
||||
params := url.Values{}
|
||||
if symbol != "" {
|
||||
params.Set("symbol", symbol)
|
||||
}
|
||||
return resp, b.SendHTTPRequest(exchange.RestFutures, http.MethodGet, btseFuturesFunding+params.Encode(), &resp, false, queryFunc)
|
||||
return resp, b.SendHTTPRequest(ctx, exchange.RestFutures, http.MethodGet, btseFuturesFunding+params.Encode(), &resp, false, queryFunc)
|
||||
}
|
||||
|
||||
// GetMarketSummary stores market summary data
|
||||
func (b *BTSE) GetMarketSummary(symbol string, spot bool) (MarketSummary, error) {
|
||||
func (b *BTSE) GetMarketSummary(ctx context.Context, symbol string, spot bool) (MarketSummary, error) {
|
||||
var m MarketSummary
|
||||
path := btseMarketOverview
|
||||
if symbol != "" {
|
||||
path += "?symbol=" + url.QueryEscape(symbol)
|
||||
}
|
||||
return m, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet, path, &m, spot, queryFunc)
|
||||
return m, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, path, &m, spot, queryFunc)
|
||||
}
|
||||
|
||||
// FetchOrderBook gets orderbook data for a given pair
|
||||
func (b *BTSE) FetchOrderBook(symbol string, group, limitBids, limitAsks int, spot bool) (*Orderbook, error) {
|
||||
func (b *BTSE) FetchOrderBook(ctx context.Context, symbol string, group, limitBids, limitAsks int, spot bool) (*Orderbook, error) {
|
||||
var o Orderbook
|
||||
urlValues := url.Values{}
|
||||
urlValues.Add("symbol", symbol)
|
||||
@@ -90,22 +90,22 @@ func (b *BTSE) FetchOrderBook(symbol string, group, limitBids, limitAsks int, sp
|
||||
if group > 0 {
|
||||
urlValues.Add("group", strconv.Itoa(group))
|
||||
}
|
||||
return &o, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet,
|
||||
return &o, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet,
|
||||
common.EncodeURLValues(btseOrderbook, urlValues), &o, spot, queryFunc)
|
||||
}
|
||||
|
||||
// FetchOrderBookL2 retrieve level 2 orderbook for requested symbol and depth
|
||||
func (b *BTSE) FetchOrderBookL2(symbol string, depth int) (*Orderbook, error) {
|
||||
func (b *BTSE) FetchOrderBookL2(ctx context.Context, symbol string, depth int) (*Orderbook, error) {
|
||||
var o Orderbook
|
||||
urlValues := url.Values{}
|
||||
urlValues.Add("symbol", symbol)
|
||||
urlValues.Add("depth", strconv.FormatInt(int64(depth), 10))
|
||||
endpoint := common.EncodeURLValues(btseOrderbook+"/L2", urlValues)
|
||||
return &o, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet, endpoint, &o, true, queryFunc)
|
||||
return &o, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, endpoint, &o, true, queryFunc)
|
||||
}
|
||||
|
||||
// GetTrades returns a list of trades for the specified symbol
|
||||
func (b *BTSE) GetTrades(symbol string, start, end time.Time, beforeSerialID, afterSerialID, count int, includeOld, spot bool) ([]Trade, error) {
|
||||
func (b *BTSE) GetTrades(ctx context.Context, symbol string, start, end time.Time, beforeSerialID, afterSerialID, count int, includeOld, spot bool) ([]Trade, error) {
|
||||
var t []Trade
|
||||
urlValues := url.Values{}
|
||||
urlValues.Add("symbol", symbol)
|
||||
@@ -130,12 +130,12 @@ func (b *BTSE) GetTrades(symbol string, start, end time.Time, beforeSerialID, af
|
||||
if includeOld {
|
||||
urlValues.Add("includeOld", "true")
|
||||
}
|
||||
return t, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet,
|
||||
return t, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet,
|
||||
common.EncodeURLValues(btseTrades, urlValues), &t, spot, queryFunc)
|
||||
}
|
||||
|
||||
// OHLCV retrieve and return OHLCV candle data for requested symbol
|
||||
func (b *BTSE) OHLCV(symbol string, start, end time.Time, resolution int) (OHLCV, error) {
|
||||
func (b *BTSE) OHLCV(ctx context.Context, symbol string, start, end time.Time, resolution int) (OHLCV, error) {
|
||||
var o OHLCV
|
||||
urlValues := url.Values{}
|
||||
urlValues.Add("symbol", symbol)
|
||||
@@ -153,40 +153,40 @@ func (b *BTSE) OHLCV(symbol string, start, end time.Time, resolution int) (OHLCV
|
||||
}
|
||||
urlValues.Add("resolution", strconv.FormatInt(int64(res), 10))
|
||||
endpoint := common.EncodeURLValues(btseOHLCV, urlValues)
|
||||
return o, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet, endpoint, &o, true, queryFunc)
|
||||
return o, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, endpoint, &o, true, queryFunc)
|
||||
}
|
||||
|
||||
// GetPrice get current price for requested symbol
|
||||
func (b *BTSE) GetPrice(symbol string) (Price, error) {
|
||||
func (b *BTSE) GetPrice(ctx context.Context, symbol string) (Price, error) {
|
||||
var p Price
|
||||
path := btsePrice + "?symbol=" + url.QueryEscape(symbol)
|
||||
return p, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet, path, &p, true, queryFunc)
|
||||
return p, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, path, &p, true, queryFunc)
|
||||
}
|
||||
|
||||
// GetServerTime returns the exchanges server time
|
||||
func (b *BTSE) GetServerTime() (*ServerTime, error) {
|
||||
func (b *BTSE) GetServerTime(ctx context.Context) (*ServerTime, error) {
|
||||
var s ServerTime
|
||||
return &s, b.SendHTTPRequest(exchange.RestSpot, http.MethodGet, btseTime, &s, true, queryFunc)
|
||||
return &s, b.SendHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseTime, &s, true, queryFunc)
|
||||
}
|
||||
|
||||
// GetWalletInformation returns the users account balance
|
||||
func (b *BTSE) GetWalletInformation() ([]CurrencyBalance, error) {
|
||||
func (b *BTSE) GetWalletInformation(ctx context.Context) ([]CurrencyBalance, error) {
|
||||
var a []CurrencyBalance
|
||||
return a, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btseWallet, true, nil, nil, &a, queryFunc)
|
||||
return a, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseWallet, true, nil, nil, &a, queryFunc)
|
||||
}
|
||||
|
||||
// GetFeeInformation retrieve fee's (maker/taker) for requested symbol
|
||||
func (b *BTSE) GetFeeInformation(symbol string) ([]AccountFees, error) {
|
||||
func (b *BTSE) GetFeeInformation(ctx context.Context, symbol string) ([]AccountFees, error) {
|
||||
var resp []AccountFees
|
||||
urlValues := url.Values{}
|
||||
if symbol != "" {
|
||||
urlValues.Add("symbol", symbol)
|
||||
}
|
||||
return resp, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btseUserFee, true, urlValues, nil, &resp, queryFunc)
|
||||
return resp, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseUserFee, true, urlValues, nil, &resp, queryFunc)
|
||||
}
|
||||
|
||||
// GetWalletHistory returns the users account balance
|
||||
func (b *BTSE) GetWalletHistory(symbol string, start, end time.Time, count int) (WalletHistory, error) {
|
||||
func (b *BTSE) GetWalletHistory(ctx context.Context, symbol string, start, end time.Time, count int) (WalletHistory, error) {
|
||||
var resp WalletHistory
|
||||
|
||||
urlValues := url.Values{}
|
||||
@@ -203,11 +203,11 @@ func (b *BTSE) GetWalletHistory(symbol string, start, end time.Time, count int)
|
||||
if count > 0 {
|
||||
urlValues.Add("count", strconv.Itoa(count))
|
||||
}
|
||||
return resp, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btseWalletHistory, true, urlValues, nil, &resp, queryFunc)
|
||||
return resp, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseWalletHistory, true, urlValues, nil, &resp, queryFunc)
|
||||
}
|
||||
|
||||
// GetWalletAddress returns the users account balance
|
||||
func (b *BTSE) GetWalletAddress(currency string) (WalletAddress, error) {
|
||||
func (b *BTSE) GetWalletAddress(ctx context.Context, currency string) (WalletAddress, error) {
|
||||
var resp WalletAddress
|
||||
|
||||
urlValues := url.Values{}
|
||||
@@ -215,15 +215,15 @@ func (b *BTSE) GetWalletAddress(currency string) (WalletAddress, error) {
|
||||
urlValues.Add("currency", currency)
|
||||
}
|
||||
|
||||
return resp, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btseWalletAddress, true, urlValues, nil, &resp, queryFunc)
|
||||
return resp, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseWalletAddress, true, urlValues, nil, &resp, queryFunc)
|
||||
}
|
||||
|
||||
// CreateWalletAddress create new deposit address for requested currency
|
||||
func (b *BTSE) CreateWalletAddress(currency string) (WalletAddress, error) {
|
||||
func (b *BTSE) CreateWalletAddress(ctx context.Context, currency string) (WalletAddress, error) {
|
||||
var resp WalletAddress
|
||||
req := make(map[string]interface{}, 1)
|
||||
req["currency"] = currency
|
||||
err := b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost, btseWalletAddress, true, nil, req, &resp, queryFunc)
|
||||
err := b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost, btseWalletAddress, true, nil, req, &resp, queryFunc)
|
||||
if err != nil {
|
||||
errResp := ErrorResponse{}
|
||||
errResponseStr := strings.Split(err.Error(), "raw response: ")
|
||||
@@ -246,18 +246,18 @@ func (b *BTSE) CreateWalletAddress(currency string) (WalletAddress, error) {
|
||||
}
|
||||
|
||||
// WalletWithdrawal submit request to withdraw crypto currency
|
||||
func (b *BTSE) WalletWithdrawal(currency, address, tag, amount string) (WithdrawalResponse, error) {
|
||||
func (b *BTSE) WalletWithdrawal(ctx context.Context, currency, address, tag, amount string) (WithdrawalResponse, error) {
|
||||
var resp WithdrawalResponse
|
||||
req := make(map[string]interface{}, 4)
|
||||
req["currency"] = currency
|
||||
req["address"] = address
|
||||
req["tag"] = tag
|
||||
req["amount"] = amount
|
||||
return resp, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost, btseWalletWithdrawal, true, nil, req, &resp, queryFunc)
|
||||
return resp, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost, btseWalletWithdrawal, true, nil, req, &resp, queryFunc)
|
||||
}
|
||||
|
||||
// CreateOrder creates an order
|
||||
func (b *BTSE) CreateOrder(clOrderID string, deviation float64, postOnly bool, price float64, side string, size, stealth, stopPrice float64, symbol, timeInForce string, trailValue, triggerPrice float64, txType, orderType string) ([]Order, error) {
|
||||
func (b *BTSE) CreateOrder(ctx context.Context, clOrderID string, deviation float64, postOnly bool, price float64, side string, size, stealth, stopPrice float64, symbol, timeInForce string, trailValue, triggerPrice float64, txType, orderType string) ([]Order, error) {
|
||||
req := make(map[string]interface{})
|
||||
if clOrderID != "" {
|
||||
req["clOrderID"] = clOrderID
|
||||
@@ -303,11 +303,11 @@ func (b *BTSE) CreateOrder(clOrderID string, deviation float64, postOnly bool, p
|
||||
}
|
||||
|
||||
var r []Order
|
||||
return r, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost, btseOrder, true, url.Values{}, req, &r, orderFunc)
|
||||
return r, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost, btseOrder, true, url.Values{}, req, &r, orderFunc)
|
||||
}
|
||||
|
||||
// GetOrders returns all pending orders
|
||||
func (b *BTSE) GetOrders(symbol, orderID, clOrderID string) ([]OpenOrder, error) {
|
||||
func (b *BTSE) GetOrders(ctx context.Context, symbol, orderID, clOrderID string) ([]OpenOrder, error) {
|
||||
req := url.Values{}
|
||||
if orderID != "" {
|
||||
req.Add("orderID", orderID)
|
||||
@@ -317,11 +317,11 @@ func (b *BTSE) GetOrders(symbol, orderID, clOrderID string) ([]OpenOrder, error)
|
||||
req.Add("clOrderID", clOrderID)
|
||||
}
|
||||
var o []OpenOrder
|
||||
return o, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btsePendingOrders, true, req, nil, &o, orderFunc)
|
||||
return o, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btsePendingOrders, true, req, nil, &o, orderFunc)
|
||||
}
|
||||
|
||||
// CancelExistingOrder cancels an order
|
||||
func (b *BTSE) CancelExistingOrder(orderID, symbol, clOrderID string) (CancelOrder, error) {
|
||||
func (b *BTSE) CancelExistingOrder(ctx context.Context, orderID, symbol, clOrderID string) (CancelOrder, error) {
|
||||
var c CancelOrder
|
||||
req := url.Values{}
|
||||
if orderID != "" {
|
||||
@@ -332,18 +332,18 @@ func (b *BTSE) CancelExistingOrder(orderID, symbol, clOrderID string) (CancelOrd
|
||||
req.Add("clOrderID", clOrderID)
|
||||
}
|
||||
|
||||
return c, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodDelete, btseOrder, true, req, nil, &c, orderFunc)
|
||||
return c, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodDelete, btseOrder, true, req, nil, &c, orderFunc)
|
||||
}
|
||||
|
||||
// CancelAllAfter cancels all orders after timeout
|
||||
func (b *BTSE) CancelAllAfter(timeout int) error {
|
||||
func (b *BTSE) CancelAllAfter(ctx context.Context, timeout int) error {
|
||||
req := make(map[string]interface{})
|
||||
req["timeout"] = timeout
|
||||
return b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost, btseCancelAllAfter, true, url.Values{}, req, nil, orderFunc)
|
||||
return b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost, btseCancelAllAfter, true, url.Values{}, req, nil, orderFunc)
|
||||
}
|
||||
|
||||
// IndexOrderPeg create peg order that will track a certain percentage above/below the index price
|
||||
func (b *BTSE) IndexOrderPeg(clOrderID string, deviation float64, postOnly bool, price float64, side string, size, stealth, stopPrice float64, symbol, timeInForce string, trailValue, triggerPrice float64, txType, orderType string) ([]Order, error) {
|
||||
func (b *BTSE) IndexOrderPeg(ctx context.Context, clOrderID string, deviation float64, postOnly bool, price float64, side string, size, stealth, stopPrice float64, symbol, timeInForce string, trailValue, triggerPrice float64, txType, orderType string) ([]Order, error) {
|
||||
var o []Order
|
||||
req := make(map[string]interface{})
|
||||
if clOrderID != "" {
|
||||
@@ -389,11 +389,11 @@ func (b *BTSE) IndexOrderPeg(clOrderID string, deviation float64, postOnly bool,
|
||||
req["type"] = orderType
|
||||
}
|
||||
|
||||
return o, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost, btsePegOrder, true, url.Values{}, req, nil, orderFunc)
|
||||
return o, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost, btsePegOrder, true, url.Values{}, req, nil, orderFunc)
|
||||
}
|
||||
|
||||
// TradeHistory returns previous trades on exchange
|
||||
func (b *BTSE) TradeHistory(symbol string, start, end time.Time, beforeSerialID, afterSerialID, count int, includeOld bool, clOrderID, orderID string) (TradeHistory, error) {
|
||||
func (b *BTSE) TradeHistory(ctx context.Context, symbol string, start, end time.Time, beforeSerialID, afterSerialID, count int, includeOld bool, clOrderID, orderID string) (TradeHistory, error) {
|
||||
var resp TradeHistory
|
||||
urlValues := url.Values{}
|
||||
if symbol != "" {
|
||||
@@ -424,11 +424,11 @@ func (b *BTSE) TradeHistory(symbol string, start, end time.Time, beforeSerialID,
|
||||
if orderID != "" {
|
||||
urlValues.Add("orderID", orderID)
|
||||
}
|
||||
return resp, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodGet, btseExchangeHistory, true, urlValues, nil, &resp, queryFunc)
|
||||
return resp, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodGet, btseExchangeHistory, true, urlValues, nil, &resp, queryFunc)
|
||||
}
|
||||
|
||||
// SendHTTPRequest sends an HTTP request to the desired endpoint
|
||||
func (b *BTSE) SendHTTPRequest(ep exchange.URL, method, endpoint string, result interface{}, spotEndpoint bool, f request.EndpointLimit) error {
|
||||
func (b *BTSE) SendHTTPRequest(ctx context.Context, ep exchange.URL, method, endpoint string, result interface{}, spotEndpoint bool, f request.EndpointLimit) error {
|
||||
ePoint, err := b.API.Endpoints.GetURL(ep)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -445,13 +445,13 @@ func (b *BTSE) SendHTTPRequest(ep exchange.URL, method, endpoint string, result
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
}
|
||||
return b.SendPayload(context.Background(), f, func() (*request.Item, error) {
|
||||
return b.SendPayload(ctx, f, func() (*request.Item, error) {
|
||||
return item, nil
|
||||
})
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequest sends an authenticated HTTP request to the desired endpoint
|
||||
func (b *BTSE) SendAuthenticatedHTTPRequest(ep exchange.URL, method, endpoint string, isSpot bool, values url.Values, req map[string]interface{}, result interface{}, f request.EndpointLimit) error {
|
||||
func (b *BTSE) SendAuthenticatedHTTPRequest(ctx context.Context, ep exchange.URL, method, endpoint string, isSpot bool, values url.Values, req map[string]interface{}, result interface{}, f request.EndpointLimit) error {
|
||||
if !b.AllowAuthenticatedRequest() {
|
||||
return fmt.Errorf("%s %w", b.Name, exchange.ErrAuthenticatedRequestWithoutCredentialsSet)
|
||||
}
|
||||
@@ -525,16 +525,16 @@ func (b *BTSE) SendAuthenticatedHTTPRequest(ep exchange.URL, method, endpoint st
|
||||
HTTPRecording: b.HTTPRecording,
|
||||
}, nil
|
||||
}
|
||||
return b.SendPayload(context.Background(), f, newRequest)
|
||||
return b.SendPayload(ctx, f, newRequest)
|
||||
}
|
||||
|
||||
// GetFee returns an estimate of fee based on type of transaction
|
||||
func (b *BTSE) GetFee(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
func (b *BTSE) GetFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
var fee float64
|
||||
|
||||
switch feeBuilder.FeeType {
|
||||
case exchange.CryptocurrencyTradeFee:
|
||||
fee = b.calculateTradingFee(feeBuilder) * feeBuilder.Amount * feeBuilder.PurchasePrice
|
||||
fee = b.calculateTradingFee(ctx, feeBuilder) * feeBuilder.Amount * feeBuilder.PurchasePrice
|
||||
case exchange.CryptocurrencyWithdrawalFee:
|
||||
switch feeBuilder.Pair.Base {
|
||||
case currency.USDT:
|
||||
@@ -590,7 +590,7 @@ func getInternationalBankWithdrawalFee(amount float64) float64 {
|
||||
}
|
||||
|
||||
// calculateTradingFee return fee based on users current fee tier or default values
|
||||
func (b *BTSE) calculateTradingFee(feeBuilder *exchange.FeeBuilder) float64 {
|
||||
func (b *BTSE) calculateTradingFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) float64 {
|
||||
formattedPair, err := b.FormatExchangeCurrency(feeBuilder.Pair, asset.Spot)
|
||||
if err != nil {
|
||||
if feeBuilder.IsMaker {
|
||||
@@ -598,8 +598,9 @@ func (b *BTSE) calculateTradingFee(feeBuilder *exchange.FeeBuilder) float64 {
|
||||
}
|
||||
return 0.002
|
||||
}
|
||||
feeTiers, err := b.GetFeeInformation(formattedPair.String())
|
||||
feeTiers, err := b.GetFeeInformation(ctx, formattedPair.String())
|
||||
if err != nil {
|
||||
// TODO: Return actual error, we should't pivot around errors.
|
||||
if feeBuilder.IsMaker {
|
||||
return 0.001
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package btse
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
@@ -58,7 +59,7 @@ func areTestAPIKeysSet() bool {
|
||||
}
|
||||
|
||||
func TestFetchFundingHistory(t *testing.T) {
|
||||
_, err := b.FetchFundingHistory("")
|
||||
_, err := b.FetchFundingHistory(context.Background(), "")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -66,12 +67,12 @@ func TestFetchFundingHistory(t *testing.T) {
|
||||
|
||||
func TestGetMarketsSummary(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetMarketSummary("", true)
|
||||
_, err := b.GetMarketSummary(context.Background(), "", true)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
ret, err := b.GetMarketSummary(testSPOTPair, true)
|
||||
ret, err := b.GetMarketSummary(context.Background(), testSPOTPair, true)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -82,17 +83,17 @@ func TestGetMarketsSummary(t *testing.T) {
|
||||
|
||||
func TestFetchOrderBook(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.FetchOrderBook(testSPOTPair, 0, 1, 1, true)
|
||||
_, err := b.FetchOrderBook(context.Background(), testSPOTPair, 0, 1, 1, true)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.FetchOrderBook(testFUTURESPair, 0, 1, 1, false)
|
||||
_, err = b.FetchOrderBook(context.Background(), testFUTURESPair, 0, 1, 1, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.FetchOrderBook(testSPOTPair, 1, 1, 1, true)
|
||||
_, err = b.FetchOrderBook(context.Background(), testSPOTPair, 1, 1, 1, true)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -105,7 +106,7 @@ func TestUpdateOrderbook(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.UpdateOrderbook(p, asset.Spot)
|
||||
_, err = b.UpdateOrderbook(context.Background(), p, asset.Spot)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -114,7 +115,7 @@ func TestUpdateOrderbook(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.UpdateOrderbook(f, asset.Futures)
|
||||
_, err = b.UpdateOrderbook(context.Background(), f, asset.Futures)
|
||||
if err != nil {
|
||||
if !errors.Is(err, common.ErrNotYetImplemented) {
|
||||
t.Fatal(err)
|
||||
@@ -124,7 +125,7 @@ func TestUpdateOrderbook(t *testing.T) {
|
||||
|
||||
func TestFetchOrderBookL2(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.FetchOrderBookL2(testSPOTPair, 20)
|
||||
_, err := b.FetchOrderBookL2(context.Background(), testSPOTPair, 20)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -132,14 +133,16 @@ func TestFetchOrderBookL2(t *testing.T) {
|
||||
|
||||
func TestOHLCV(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.OHLCV(testSPOTPair,
|
||||
_, err := b.OHLCV(context.Background(),
|
||||
testSPOTPair,
|
||||
time.Now().AddDate(0, 0, -1),
|
||||
time.Now(), 60)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.OHLCV(testSPOTPair, time.Now(), time.Now().AddDate(0, 0, -1), 60)
|
||||
_, err = b.OHLCV(context.Background(),
|
||||
testSPOTPair, time.Now(), time.Now().AddDate(0, 0, -1), 60)
|
||||
if err == nil {
|
||||
t.Fatal("expected error if start is after end date")
|
||||
}
|
||||
@@ -147,7 +150,7 @@ func TestOHLCV(t *testing.T) {
|
||||
|
||||
func TestGetPrice(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetPrice(testSPOTPair)
|
||||
_, err := b.GetPrice(context.Background(), testSPOTPair)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -167,7 +170,7 @@ func TestGetHistoricCandles(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.GetHistoricCandles(
|
||||
_, err = b.GetHistoricCandles(context.Background(),
|
||||
curr, asset.Spot,
|
||||
time.Time{}, time.Time{},
|
||||
kline.OneMin)
|
||||
@@ -175,7 +178,7 @@ func TestGetHistoricCandles(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.GetHistoricCandles(
|
||||
_, err = b.GetHistoricCandles(context.Background(),
|
||||
curr, asset.Spot,
|
||||
time.Time{}, time.Time{},
|
||||
kline.OneDay)
|
||||
@@ -184,7 +187,7 @@ func TestGetHistoricCandles(t *testing.T) {
|
||||
}
|
||||
|
||||
curr.Quote = currency.XRP
|
||||
_, err = b.GetHistoricCandles(
|
||||
_, err = b.GetHistoricCandles(context.Background(),
|
||||
curr, asset.Spot,
|
||||
time.Time{}, time.Time{},
|
||||
kline.OneMin)
|
||||
@@ -200,7 +203,7 @@ func TestGetHistoricCandlesExtended(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.GetHistoricCandlesExtended(
|
||||
_, err = b.GetHistoricCandlesExtended(context.Background(),
|
||||
curr, asset.Spot,
|
||||
time.Time{}, time.Time{},
|
||||
kline.OneMin)
|
||||
@@ -211,21 +214,24 @@ func TestGetHistoricCandlesExtended(t *testing.T) {
|
||||
|
||||
func TestGetTrades(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetTrades(testSPOTPair,
|
||||
_, err := b.GetTrades(context.Background(),
|
||||
testSPOTPair,
|
||||
time.Now().AddDate(0, 0, -1), time.Now(),
|
||||
0, 0, 50, false, true)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetTrades(testSPOTPair,
|
||||
_, err = b.GetTrades(context.Background(),
|
||||
testSPOTPair,
|
||||
time.Now(), time.Now().AddDate(0, -1, 0),
|
||||
0, 0, 50, false, true)
|
||||
if err == nil {
|
||||
t.Error("expected error if start time is after end time")
|
||||
}
|
||||
|
||||
_, err = b.GetTrades(testFUTURESPair,
|
||||
_, err = b.GetTrades(context.Background(),
|
||||
testFUTURESPair,
|
||||
time.Now().AddDate(0, 0, -1), time.Now(),
|
||||
0, 0, 50, false, false)
|
||||
if err != nil {
|
||||
@@ -240,7 +246,7 @@ func TestUpdateTicker(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.UpdateTicker(curr, asset.Spot)
|
||||
_, err = b.UpdateTicker(context.Background(), curr, asset.Spot)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -250,7 +256,7 @@ func TestUpdateTicker(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.UpdateTicker(curr, asset.Futures)
|
||||
_, err = b.UpdateTicker(context.Background(), curr, asset.Futures)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -259,12 +265,12 @@ func TestUpdateTicker(t *testing.T) {
|
||||
func TestUpdateTickers(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
err := b.UpdateTickers(asset.Spot)
|
||||
err := b.UpdateTickers(context.Background(), asset.Spot)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = b.UpdateTickers(asset.Futures)
|
||||
err = b.UpdateTickers(context.Background(), asset.Futures)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -272,7 +278,7 @@ func TestUpdateTickers(t *testing.T) {
|
||||
|
||||
func TestGetServerTime(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetServerTime()
|
||||
_, err := b.GetServerTime(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -283,7 +289,7 @@ func TestGetWalletInformation(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetWalletInformation()
|
||||
_, err := b.GetWalletInformation(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -294,7 +300,7 @@ func TestGetFeeInformation(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetFeeInformation("")
|
||||
_, err := b.GetFeeInformation(context.Background(), "")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -305,7 +311,8 @@ func TestGetWalletHistory(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetWalletHistory(testSPOTPair,
|
||||
_, err := b.GetWalletHistory(context.Background(),
|
||||
testSPOTPair,
|
||||
time.Time{}, time.Time{},
|
||||
50)
|
||||
if err != nil {
|
||||
@@ -318,7 +325,7 @@ func TestGetWalletAddress(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetWalletAddress("XRP")
|
||||
_, err := b.GetWalletAddress(context.Background(), "XRP")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -329,7 +336,7 @@ func TestCreateWalletAddress(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.CreateWalletAddress("XRP")
|
||||
_, err := b.CreateWalletAddress(context.Background(), "XRP")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -340,7 +347,7 @@ func TestGetDepositAddress(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetDepositAddress(currency.XRP, "")
|
||||
_, err := b.GetDepositAddress(context.Background(), currency.XRP, "")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -351,7 +358,8 @@ func TestCreateOrder(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys are unset or canManipulateRealOrders is false")
|
||||
}
|
||||
_, err := b.CreateOrder("", 0.0,
|
||||
_, err := b.CreateOrder(context.Background(),
|
||||
"", 0.0,
|
||||
false,
|
||||
-1, "BUY", 100, 0, 0,
|
||||
testSPOTPair, "GTC",
|
||||
@@ -367,7 +375,8 @@ func TestBTSEIndexOrderPeg(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys are unset or canManipulateRealOrders is false")
|
||||
}
|
||||
_, err := b.IndexOrderPeg("", 0.0,
|
||||
_, err := b.IndexOrderPeg(context.Background(),
|
||||
"", 0.0,
|
||||
false,
|
||||
-1, "BUY", 100, 0, 0,
|
||||
testSPOTPair, "GTC",
|
||||
@@ -383,7 +392,7 @@ func TestGetOrders(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.GetOrders(testSPOTPair, "", "")
|
||||
_, err := b.GetOrders(context.Background(), testSPOTPair, "", "")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -411,7 +420,7 @@ func TestGetActiveOrders(t *testing.T) {
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
|
||||
_, err := b.GetActiveOrders(&getOrdersRequest)
|
||||
_, err := b.GetActiveOrders(context.Background(), &getOrdersRequest)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -426,7 +435,7 @@ func TestGetOrderHistory(t *testing.T) {
|
||||
Type: order.AnyType,
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
_, err := b.GetOrderHistory(&getOrdersRequest)
|
||||
_, err := b.GetOrderHistory(context.Background(), &getOrdersRequest)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -437,7 +446,8 @@ func TestTradeHistory(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("API keys not set, skipping test")
|
||||
}
|
||||
_, err := b.TradeHistory("",
|
||||
_, err := b.TradeHistory(context.Background(),
|
||||
"",
|
||||
time.Time{}, time.Time{},
|
||||
0, 0, 0,
|
||||
false,
|
||||
@@ -466,7 +476,7 @@ func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
|
||||
PurchasePrice: 1000,
|
||||
}
|
||||
|
||||
_, err := b.GetFeeByType(feeBuilder)
|
||||
_, err := b.GetFeeByType(context.Background(), feeBuilder)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -492,42 +502,42 @@ func TestGetFee(t *testing.T) {
|
||||
PurchasePrice: 1000,
|
||||
}
|
||||
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.IsMaker = false
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.Pair.Base = currency.USDT
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.FeeType = exchange.InternationalBankDepositFee
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.Amount = 1000000
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
feeBuilder.Amount = 1000
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@@ -560,7 +570,7 @@ func TestSubmitOrder(t *testing.T) {
|
||||
ClientID: "",
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
response, err := b.SubmitOrder(orderSubmission)
|
||||
response, err := b.SubmitOrder(context.Background(), orderSubmission)
|
||||
if areTestAPIKeysSet() && (err != nil || !response.IsOrderPlaced) {
|
||||
t.Errorf("Order failed to be placed: %v", err)
|
||||
} else if !areTestAPIKeysSet() && err == nil {
|
||||
@@ -574,7 +584,7 @@ func TestCancelAllAfter(t *testing.T) {
|
||||
t.Skip("skipping test, either api keys are unset or canManipulateRealOrders is false")
|
||||
}
|
||||
|
||||
err := b.CancelAllAfter(1)
|
||||
err := b.CancelAllAfter(context.Background(), 1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -595,7 +605,7 @@ func TestCancelExchangeOrder(t *testing.T) {
|
||||
Pair: currencyPair,
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
err := b.CancelOrder(orderCancellation)
|
||||
err := b.CancelOrder(context.Background(), orderCancellation)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -606,7 +616,7 @@ func TestCancelOrder(t *testing.T) {
|
||||
if !areTestAPIKeysSet() || !canManipulateRealOrders {
|
||||
t.Skip("skipping test, either api keys are unset or canManipulateRealOrders is false")
|
||||
}
|
||||
_, err := b.CancelExistingOrder("", testSPOTPair, "")
|
||||
_, err := b.CancelExistingOrder(context.Background(), "", testSPOTPair, "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -627,7 +637,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
|
||||
Pair: currencyPair,
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
resp, err := b.CancelAllOrders(orderCancellation)
|
||||
resp, err := b.CancelAllOrders(context.Background(), orderCancellation)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Could not cancel orders: %v", err)
|
||||
@@ -697,7 +707,7 @@ func TestFetchTradablePairs(t *testing.T) {
|
||||
t.Parallel()
|
||||
assets := b.GetAssetTypes(false)
|
||||
for i := range assets {
|
||||
data, err := b.FetchTradablePairs(assets[i])
|
||||
data, err := b.FetchTradablePairs(context.Background(), assets[i])
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -732,7 +742,7 @@ func TestMatchType(t *testing.T) {
|
||||
|
||||
func TestSeedOrderSizeLimits(t *testing.T) {
|
||||
t.Parallel()
|
||||
err := b.seedOrderSizeLimits()
|
||||
err := b.seedOrderSizeLimits(context.Background())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -842,7 +852,7 @@ func TestGetRecentTrades(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.GetRecentTrades(currencyPair, asset.Spot)
|
||||
_, err = b.GetRecentTrades(context.Background(), currencyPair, asset.Spot)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -850,7 +860,7 @@ func TestGetRecentTrades(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.GetRecentTrades(currencyPair, asset.Futures)
|
||||
_, err = b.GetRecentTrades(context.Background(), currencyPair, asset.Futures)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -860,7 +870,8 @@ func TestGetHistoricTrades(t *testing.T) {
|
||||
t.Parallel()
|
||||
curr, _ := currency.NewPairFromString(testSPOTPair)
|
||||
|
||||
_, err := b.GetHistoricTrades(curr, asset.Spot, time.Now().Add(-time.Minute), time.Now())
|
||||
_, err := b.GetHistoricTrades(context.Background(),
|
||||
curr, asset.Spot, time.Now().Add(-time.Minute), time.Now())
|
||||
if err == nil {
|
||||
t.Fatal("expected error")
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package btse
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
@@ -42,7 +43,7 @@ func (b *BTSE) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
}
|
||||
|
||||
if b.Features.Supports.RESTCapabilities.AutoPairUpdates {
|
||||
err = b.UpdateTradablePairs(true)
|
||||
err = b.UpdateTradablePairs(context.TODO(), true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -202,7 +203,7 @@ func (b *BTSE) Setup(exch *config.ExchangeConfig) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = b.seedOrderSizeLimits()
|
||||
err = b.seedOrderSizeLimits(context.TODO())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -232,7 +233,7 @@ func (b *BTSE) Run() {
|
||||
return
|
||||
}
|
||||
|
||||
err := b.UpdateTradablePairs(false)
|
||||
err := b.UpdateTradablePairs(context.TODO(), false)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s Failed to update tradable pairs. Error: %s", b.Name, err)
|
||||
@@ -240,9 +241,9 @@ func (b *BTSE) Run() {
|
||||
}
|
||||
|
||||
// FetchTradablePairs returns a list of the exchanges tradable pairs
|
||||
func (b *BTSE) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
func (b *BTSE) FetchTradablePairs(ctx context.Context, a asset.Item) ([]string, error) {
|
||||
var currencies []string
|
||||
m, err := b.GetMarketSummary("", a == asset.Spot)
|
||||
m, err := b.GetMarketSummary(ctx, "", a == asset.Spot)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -258,10 +259,10 @@ func (b *BTSE) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
|
||||
// UpdateTradablePairs updates the exchanges available pairs and stores
|
||||
// them in the exchanges config
|
||||
func (b *BTSE) UpdateTradablePairs(forceUpdate bool) error {
|
||||
func (b *BTSE) UpdateTradablePairs(ctx context.Context, forceUpdate bool) error {
|
||||
a := b.GetAssetTypes(false)
|
||||
for i := range a {
|
||||
pairs, err := b.FetchTradablePairs(a[i])
|
||||
pairs, err := b.FetchTradablePairs(ctx, a[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -280,8 +281,8 @@ func (b *BTSE) UpdateTradablePairs(forceUpdate bool) error {
|
||||
}
|
||||
|
||||
// UpdateTickers updates the ticker for all currency pairs of a given asset type
|
||||
func (b *BTSE) UpdateTickers(a asset.Item) error {
|
||||
tickers, err := b.GetMarketSummary("", a == asset.Spot)
|
||||
func (b *BTSE) UpdateTickers(ctx context.Context, a asset.Item) error {
|
||||
tickers, err := b.GetMarketSummary(ctx, "", a == asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -311,8 +312,8 @@ func (b *BTSE) UpdateTickers(a asset.Item) error {
|
||||
}
|
||||
|
||||
// UpdateTicker updates and returns the ticker for a currency pair
|
||||
func (b *BTSE) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
err := b.UpdateTickers(a)
|
||||
func (b *BTSE) UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
err := b.UpdateTickers(ctx, a)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -320,25 +321,25 @@ func (b *BTSE) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error
|
||||
}
|
||||
|
||||
// FetchTicker returns the ticker for a currency pair
|
||||
func (b *BTSE) FetchTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
|
||||
func (b *BTSE) FetchTicker(ctx context.Context, p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
|
||||
tickerNew, err := ticker.GetTicker(b.Name, p, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateTicker(p, assetType)
|
||||
return b.UpdateTicker(ctx, p, assetType)
|
||||
}
|
||||
return tickerNew, nil
|
||||
}
|
||||
|
||||
// FetchOrderbook returns orderbook base on the currency pair
|
||||
func (b *BTSE) FetchOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *BTSE) FetchOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
ob, err := orderbook.Get(b.Name, p, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateOrderbook(p, assetType)
|
||||
return b.UpdateOrderbook(ctx, p, assetType)
|
||||
}
|
||||
return ob, nil
|
||||
}
|
||||
|
||||
// UpdateOrderbook updates and returns the orderbook for a currency pair
|
||||
func (b *BTSE) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *BTSE) UpdateOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
book := &orderbook.Base{
|
||||
Exchange: b.Name,
|
||||
Pair: p,
|
||||
@@ -349,7 +350,7 @@ func (b *BTSE) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orderboo
|
||||
if err != nil {
|
||||
return book, err
|
||||
}
|
||||
a, err := b.FetchOrderBook(fPair.String(), 0, 0, 0, assetType == asset.Spot)
|
||||
a, err := b.FetchOrderBook(ctx, fPair.String(), 0, 0, 0, assetType == asset.Spot)
|
||||
if err != nil {
|
||||
return book, err
|
||||
}
|
||||
@@ -383,9 +384,9 @@ func (b *BTSE) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orderboo
|
||||
|
||||
// UpdateAccountInfo retrieves balances for all enabled currencies for the
|
||||
// BTSE exchange
|
||||
func (b *BTSE) UpdateAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *BTSE) UpdateAccountInfo(ctx context.Context, assetType asset.Item) (account.Holdings, error) {
|
||||
var a account.Holdings
|
||||
balance, err := b.GetWalletInformation()
|
||||
balance, err := b.GetWalletInformation(ctx)
|
||||
if err != nil {
|
||||
return a, err
|
||||
}
|
||||
@@ -416,10 +417,10 @@ func (b *BTSE) UpdateAccountInfo(assetType asset.Item) (account.Holdings, error)
|
||||
}
|
||||
|
||||
// FetchAccountInfo retrieves balances for all enabled currencies
|
||||
func (b *BTSE) FetchAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *BTSE) FetchAccountInfo(ctx context.Context, assetType asset.Item) (account.Holdings, error) {
|
||||
acc, err := account.GetHoldings(b.Name, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateAccountInfo(assetType)
|
||||
return b.UpdateAccountInfo(ctx, assetType)
|
||||
}
|
||||
|
||||
return acc, nil
|
||||
@@ -427,7 +428,7 @@ func (b *BTSE) FetchAccountInfo(assetType asset.Item) (account.Holdings, error)
|
||||
|
||||
// GetFundingHistory returns funding history, deposits and
|
||||
// withdrawals
|
||||
func (b *BTSE) GetFundingHistory() ([]exchange.FundHistory, error) {
|
||||
func (b *BTSE) GetFundingHistory(ctx context.Context) ([]exchange.FundHistory, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
@@ -442,12 +443,12 @@ func (b *BTSE) withinLimits(pair currency.Pair, amount float64) bool {
|
||||
}
|
||||
|
||||
// GetWithdrawalsHistory returns previous withdrawals data
|
||||
func (b *BTSE) GetWithdrawalsHistory(c currency.Code) (resp []exchange.WithdrawalHistory, err error) {
|
||||
func (b *BTSE) GetWithdrawalsHistory(ctx context.Context, c currency.Code) (resp []exchange.WithdrawalHistory, err error) {
|
||||
return nil, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// GetRecentTrades returns the most recent trades for a currency and asset
|
||||
func (b *BTSE) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
func (b *BTSE) GetRecentTrades(ctx context.Context, p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
var err error
|
||||
p, err = b.FormatExchangeCurrency(p, assetType)
|
||||
if err != nil {
|
||||
@@ -457,7 +458,8 @@ func (b *BTSE) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trade.D
|
||||
limit := 500
|
||||
|
||||
var tradeData []Trade
|
||||
tradeData, err = b.GetTrades(p.String(),
|
||||
tradeData, err = b.GetTrades(ctx,
|
||||
p.String(),
|
||||
time.Time{}, time.Time{},
|
||||
0, 0, limit,
|
||||
false,
|
||||
@@ -493,12 +495,12 @@ func (b *BTSE) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trade.D
|
||||
}
|
||||
|
||||
// GetHistoricTrades returns historic trade data within the timeframe provided
|
||||
func (b *BTSE) GetHistoricTrades(_ currency.Pair, _ asset.Item, _, _ time.Time) ([]trade.Data, error) {
|
||||
func (b *BTSE) GetHistoricTrades(_ context.Context, _ currency.Pair, _ asset.Item, _, _ time.Time) ([]trade.Data, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// SubmitOrder submits a new order
|
||||
func (b *BTSE) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
func (b *BTSE) SubmitOrder(ctx context.Context, s *order.Submit) (order.SubmitResponse, error) {
|
||||
var resp order.SubmitResponse
|
||||
if err := s.Validate(); err != nil {
|
||||
return resp, err
|
||||
@@ -513,12 +515,18 @@ func (b *BTSE) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
return resp, errors.New("order outside of limits")
|
||||
}
|
||||
|
||||
r, err := b.CreateOrder(s.ClientID, 0.0,
|
||||
r, err := b.CreateOrder(ctx,
|
||||
s.ClientID, 0.0,
|
||||
false,
|
||||
s.Price, s.Side.String(), s.Amount, 0, 0,
|
||||
fPair.String(), goodTillCancel,
|
||||
0.0, s.TriggerPrice,
|
||||
"", s.Type.String())
|
||||
s.Price,
|
||||
s.Side.String(),
|
||||
s.Amount, 0, 0,
|
||||
fPair.String(),
|
||||
goodTillCancel,
|
||||
0.0,
|
||||
s.TriggerPrice,
|
||||
"",
|
||||
s.Type.String())
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
@@ -534,12 +542,12 @@ func (b *BTSE) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
|
||||
// ModifyOrder will allow of changing orderbook placement and limit to
|
||||
// market conversion
|
||||
func (b *BTSE) ModifyOrder(action *order.Modify) (order.Modify, error) {
|
||||
func (b *BTSE) ModifyOrder(ctx context.Context, action *order.Modify) (order.Modify, error) {
|
||||
return order.Modify{}, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// CancelOrder cancels an order by its corresponding ID number
|
||||
func (b *BTSE) CancelOrder(o *order.Cancel) error {
|
||||
func (b *BTSE) CancelOrder(ctx context.Context, o *order.Cancel) error {
|
||||
if err := o.Validate(o.StandardCancel()); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -550,7 +558,7 @@ func (b *BTSE) CancelOrder(o *order.Cancel) error {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = b.CancelExistingOrder(o.ID, fPair.String(), o.ClientOrderID)
|
||||
_, err = b.CancelExistingOrder(ctx, o.ID, fPair.String(), o.ClientOrderID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -559,14 +567,14 @@ func (b *BTSE) CancelOrder(o *order.Cancel) error {
|
||||
}
|
||||
|
||||
// CancelBatchOrders cancels an orders by their corresponding ID numbers
|
||||
func (b *BTSE) CancelBatchOrders(o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
func (b *BTSE) CancelBatchOrders(ctx context.Context, o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
return order.CancelBatchResponse{}, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// CancelAllOrders cancels all orders associated with a currency pair
|
||||
// If product ID is sent, all orders of that specified market will be cancelled
|
||||
// If not specified, all orders of all markets will be cancelled
|
||||
func (b *BTSE) CancelAllOrders(orderCancellation *order.Cancel) (order.CancelAllResponse, error) {
|
||||
func (b *BTSE) CancelAllOrders(ctx context.Context, orderCancellation *order.Cancel) (order.CancelAllResponse, error) {
|
||||
if err := orderCancellation.Validate(); err != nil {
|
||||
return order.CancelAllResponse{}, err
|
||||
}
|
||||
@@ -579,7 +587,7 @@ func (b *BTSE) CancelAllOrders(orderCancellation *order.Cancel) (order.CancelAll
|
||||
return resp, err
|
||||
}
|
||||
|
||||
allOrders, err := b.CancelExistingOrder("", fPair.String(), "")
|
||||
allOrders, err := b.CancelExistingOrder(ctx, "", fPair.String(), "")
|
||||
if err != nil {
|
||||
return resp, nil
|
||||
}
|
||||
@@ -603,8 +611,8 @@ func orderIntToType(i int) order.Type {
|
||||
}
|
||||
|
||||
// GetOrderInfo returns order information based on order ID
|
||||
func (b *BTSE) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
o, err := b.GetOrders("", orderID, "")
|
||||
func (b *BTSE) GetOrderInfo(ctx context.Context, orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
o, err := b.GetOrders(ctx, "", orderID, "")
|
||||
if err != nil {
|
||||
return order.Detail{}, err
|
||||
}
|
||||
@@ -648,7 +656,8 @@ func (b *BTSE) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.
|
||||
od.Price = o[i].Price
|
||||
od.Status = order.Status(o[i].OrderState)
|
||||
|
||||
th, err := b.TradeHistory("",
|
||||
th, err := b.TradeHistory(ctx,
|
||||
"",
|
||||
time.Time{}, time.Time{},
|
||||
0, 0, 0,
|
||||
false,
|
||||
@@ -679,13 +688,13 @@ func (b *BTSE) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.
|
||||
}
|
||||
|
||||
// GetDepositAddress returns a deposit address for a specified currency
|
||||
func (b *BTSE) GetDepositAddress(cryptocurrency currency.Code, accountID string) (string, error) {
|
||||
address, err := b.GetWalletAddress(cryptocurrency.String())
|
||||
func (b *BTSE) GetDepositAddress(ctx context.Context, c currency.Code, accountID string) (string, error) {
|
||||
address, err := b.GetWalletAddress(ctx, c.String())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(address) == 0 {
|
||||
addressCreate, err := b.CreateWalletAddress(cryptocurrency.String())
|
||||
addressCreate, err := b.CreateWalletAddress(ctx, c.String())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -699,12 +708,13 @@ func (b *BTSE) GetDepositAddress(cryptocurrency currency.Code, accountID string)
|
||||
|
||||
// WithdrawCryptocurrencyFunds returns a withdrawal ID when a withdrawal is
|
||||
// submitted
|
||||
func (b *BTSE) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *BTSE) WithdrawCryptocurrencyFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
if err := withdrawRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
amountToString := strconv.FormatFloat(withdrawRequest.Amount, 'f', 8, 64)
|
||||
resp, err := b.WalletWithdrawal(withdrawRequest.Currency.String(),
|
||||
resp, err := b.WalletWithdrawal(ctx,
|
||||
withdrawRequest.Currency.String(),
|
||||
withdrawRequest.Crypto.Address,
|
||||
withdrawRequest.Crypto.AddressTag,
|
||||
amountToString)
|
||||
@@ -719,18 +729,18 @@ func (b *BTSE) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request) (*
|
||||
|
||||
// WithdrawFiatFunds returns a withdrawal ID when a withdrawal is
|
||||
// submitted
|
||||
func (b *BTSE) WithdrawFiatFunds(_ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *BTSE) WithdrawFiatFunds(_ context.Context, _ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// WithdrawFiatFundsToInternationalBank returns a withdrawal ID when a withdrawal is
|
||||
// submitted
|
||||
func (b *BTSE) WithdrawFiatFundsToInternationalBank(_ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *BTSE) WithdrawFiatFundsToInternationalBank(_ context.Context, _ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// GetActiveOrders retrieves any orders that are active/open
|
||||
func (b *BTSE) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *BTSE) GetActiveOrders(ctx context.Context, req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -745,7 +755,7 @@ func (b *BTSE) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp, err := b.GetOrders(formattedPair.String(), "", "")
|
||||
resp, err := b.GetOrders(ctx, formattedPair.String(), "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -787,7 +797,7 @@ func (b *BTSE) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, err
|
||||
openOrder.Type = order.Limit
|
||||
}
|
||||
|
||||
fills, err := b.TradeHistory(
|
||||
fills, err := b.TradeHistory(ctx,
|
||||
"",
|
||||
time.Time{}, time.Time{},
|
||||
0, 0, 0,
|
||||
@@ -838,7 +848,7 @@ func matchType(input int, required order.Type) bool {
|
||||
|
||||
// GetOrderHistory retrieves account order information
|
||||
// Can Limit response to specific order status
|
||||
func (b *BTSE) GetOrderHistory(getOrdersRequest *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *BTSE) GetOrderHistory(ctx context.Context, getOrdersRequest *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := getOrdersRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -857,7 +867,7 @@ func (b *BTSE) GetOrderHistory(getOrdersRequest *order.GetOrdersRequest) ([]orde
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
currentOrder, err := b.GetOrders(fPair.String(), "", "")
|
||||
currentOrder, err := b.GetOrders(ctx, fPair.String(), "", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -890,18 +900,18 @@ func (b *BTSE) GetOrderHistory(getOrdersRequest *order.GetOrdersRequest) ([]orde
|
||||
}
|
||||
|
||||
// GetFeeByType returns an estimate of fee based on type of transaction
|
||||
func (b *BTSE) GetFeeByType(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
func (b *BTSE) GetFeeByType(ctx context.Context, feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
if !b.AllowAuthenticatedRequest() && // Todo check connection status
|
||||
feeBuilder.FeeType == exchange.CryptocurrencyTradeFee {
|
||||
feeBuilder.FeeType = exchange.OfflineTradeFee
|
||||
}
|
||||
return b.GetFee(feeBuilder)
|
||||
return b.GetFee(ctx, feeBuilder)
|
||||
}
|
||||
|
||||
// ValidateCredentials validates current credentials used for wrapper
|
||||
// functionality
|
||||
func (b *BTSE) ValidateCredentials(assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(assetType)
|
||||
func (b *BTSE) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(ctx, assetType)
|
||||
return b.CheckTransientError(err)
|
||||
}
|
||||
|
||||
@@ -911,7 +921,7 @@ func (b *BTSE) FormatExchangeKlineInterval(in kline.Interval) string {
|
||||
}
|
||||
|
||||
// GetHistoricCandles returns candles between a time period for a set time interval
|
||||
func (b *BTSE) GetHistoricCandles(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *BTSE) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
if err := b.ValidateKline(pair, a, interval); err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -934,7 +944,8 @@ func (b *BTSE) GetHistoricCandles(pair currency.Pair, a asset.Item, start, end t
|
||||
|
||||
switch a {
|
||||
case asset.Spot:
|
||||
req, err := b.OHLCV(fPair.String(),
|
||||
req, err := b.OHLCV(ctx,
|
||||
fPair.String(),
|
||||
start,
|
||||
end,
|
||||
intervalInt)
|
||||
@@ -962,7 +973,7 @@ func (b *BTSE) GetHistoricCandles(pair currency.Pair, a asset.Item, start, end t
|
||||
}
|
||||
|
||||
// GetHistoricCandlesExtended returns candles between a time period for a set time interval
|
||||
func (b *BTSE) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *BTSE) GetHistoricCandlesExtended(ctx context.Context, pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
if err := b.ValidateKline(pair, a, interval); err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -989,7 +1000,8 @@ func (b *BTSE) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, star
|
||||
|
||||
switch a {
|
||||
case asset.Spot:
|
||||
req, err := b.OHLCV(fPair.String(),
|
||||
req, err := b.OHLCV(ctx,
|
||||
fPair.String(),
|
||||
start,
|
||||
end,
|
||||
intervalInt)
|
||||
@@ -1016,8 +1028,8 @@ func (b *BTSE) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, star
|
||||
return klineRet, nil
|
||||
}
|
||||
|
||||
func (b *BTSE) seedOrderSizeLimits() error {
|
||||
pairs, err := b.GetMarketSummary("", true)
|
||||
func (b *BTSE) seedOrderSizeLimits(ctx context.Context) error {
|
||||
pairs, err := b.GetMarketSummary(ctx, "", true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1030,7 +1042,7 @@ func (b *BTSE) seedOrderSizeLimits() error {
|
||||
orderSizeLimitMap.Store(pairs[x].Symbol, tempValues)
|
||||
}
|
||||
|
||||
pairs, err = b.GetMarketSummary("", false)
|
||||
pairs, err = b.GetMarketSummary(ctx, "", false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user