mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-03 07:26:45 +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:
@@ -97,9 +97,9 @@ type Bitfinex struct {
|
||||
}
|
||||
|
||||
// GetPlatformStatus returns the Bifinex platform status
|
||||
func (b *Bitfinex) GetPlatformStatus() (int, error) {
|
||||
func (b *Bitfinex) GetPlatformStatus(ctx context.Context) (int, error) {
|
||||
var response []int
|
||||
err := b.SendHTTPRequest(exchange.RestSpot,
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot,
|
||||
bitfinexAPIVersion2+
|
||||
bitfinexPlatformStatus,
|
||||
&response,
|
||||
@@ -223,9 +223,10 @@ func defaultMarginV2Info(data []interface{}) (MarginInfoV2, error) {
|
||||
|
||||
// GetV2MarginInfo gets v2 margin info for a symbol provided
|
||||
// symbol: base, sym_all, any other trading symbol example tBTCUSD
|
||||
func (b *Bitfinex) GetV2MarginInfo(symbol string) ([]MarginInfoV2, error) {
|
||||
func (b *Bitfinex) GetV2MarginInfo(ctx context.Context, symbol string) ([]MarginInfoV2, error) {
|
||||
var data []interface{}
|
||||
err := b.SendAuthenticatedHTTPRequestV2(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequestV2(ctx,
|
||||
exchange.RestSpot, http.MethodPost,
|
||||
bitfinexV2MarginInfo+symbol,
|
||||
nil,
|
||||
&data,
|
||||
@@ -254,14 +255,14 @@ func (b *Bitfinex) GetV2MarginInfo(symbol string) ([]MarginInfoV2, error) {
|
||||
}
|
||||
|
||||
// GetV2MarginFunding gets borrowing rates for margin trading
|
||||
func (b *Bitfinex) GetV2MarginFunding(symbol, amount string, period int32) (MarginV2FundingData, error) {
|
||||
func (b *Bitfinex) GetV2MarginFunding(ctx context.Context, symbol, amount string, period int32) (MarginV2FundingData, error) {
|
||||
var resp []interface{}
|
||||
var response MarginV2FundingData
|
||||
params := make(map[string]interface{})
|
||||
params["symbol"] = symbol
|
||||
params["period"] = period
|
||||
params["amount"] = amount
|
||||
err := b.SendAuthenticatedHTTPRequestV2(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequestV2(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexV2MarginFunding,
|
||||
params,
|
||||
&resp,
|
||||
@@ -287,10 +288,10 @@ func (b *Bitfinex) GetV2MarginFunding(symbol, amount string, period int32) (Marg
|
||||
}
|
||||
|
||||
// GetV2FundingInfo gets funding info for margin pairs
|
||||
func (b *Bitfinex) GetV2FundingInfo(key string) (MarginFundingDataV2, error) {
|
||||
func (b *Bitfinex) GetV2FundingInfo(ctx context.Context, key string) (MarginFundingDataV2, error) {
|
||||
var resp []interface{}
|
||||
var response MarginFundingDataV2
|
||||
err := b.SendAuthenticatedHTTPRequestV2(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequestV2(ctx, exchange.RestSpot, http.MethodPost,
|
||||
fmt.Sprintf(bitfinexV2FundingInfo, key),
|
||||
nil,
|
||||
&resp,
|
||||
@@ -332,10 +333,10 @@ func (b *Bitfinex) GetV2FundingInfo(key string) (MarginFundingDataV2, error) {
|
||||
}
|
||||
|
||||
// GetAccountInfoV2 gets V2 account data
|
||||
func (b *Bitfinex) GetAccountInfoV2() (AccountV2Data, error) {
|
||||
func (b *Bitfinex) GetAccountInfoV2(ctx context.Context) (AccountV2Data, error) {
|
||||
var resp AccountV2Data
|
||||
var data []interface{}
|
||||
err := b.SendAuthenticatedHTTPRequestV2(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequestV2(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexV2AccountInfo,
|
||||
nil,
|
||||
&data,
|
||||
@@ -377,10 +378,11 @@ func (b *Bitfinex) GetAccountInfoV2() (AccountV2Data, error) {
|
||||
}
|
||||
|
||||
// GetV2Balances gets v2 balances
|
||||
func (b *Bitfinex) GetV2Balances() ([]WalletDataV2, error) {
|
||||
func (b *Bitfinex) GetV2Balances(ctx context.Context) ([]WalletDataV2, error) {
|
||||
var resp []WalletDataV2
|
||||
var data [][4]interface{}
|
||||
err := b.SendAuthenticatedHTTPRequestV2(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequestV2(ctx,
|
||||
exchange.RestSpot, http.MethodPost,
|
||||
bitfinexV2Balances,
|
||||
nil,
|
||||
&data,
|
||||
@@ -416,10 +418,10 @@ func (b *Bitfinex) GetV2Balances() ([]WalletDataV2, error) {
|
||||
}
|
||||
|
||||
// GetMarginPairs gets pairs that allow margin trading
|
||||
func (b *Bitfinex) GetMarginPairs() ([]string, error) {
|
||||
func (b *Bitfinex) GetMarginPairs(ctx context.Context) ([]string, error) {
|
||||
var resp [][]string
|
||||
path := bitfinexAPIVersion2 + bitfinexMarginPairs
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &resp, status)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &resp, status)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -430,7 +432,7 @@ func (b *Bitfinex) GetMarginPairs() ([]string, error) {
|
||||
}
|
||||
|
||||
// GetDerivativeStatusInfo gets status data for the queried derivative
|
||||
func (b *Bitfinex) GetDerivativeStatusInfo(keys, startTime, endTime string, sort, limit int64) ([]DerivativeDataResponse, error) {
|
||||
func (b *Bitfinex) GetDerivativeStatusInfo(ctx context.Context, keys, startTime, endTime string, sort, limit int64) ([]DerivativeDataResponse, error) {
|
||||
var result [][]interface{}
|
||||
var finalResp []DerivativeDataResponse
|
||||
|
||||
@@ -450,7 +452,7 @@ func (b *Bitfinex) GetDerivativeStatusInfo(keys, startTime, endTime string, sort
|
||||
}
|
||||
path := bitfinexAPIVersion2 + bitfinexDerivativeData +
|
||||
params.Encode()
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &result, status)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &result, status)
|
||||
if err != nil {
|
||||
return finalResp, err
|
||||
}
|
||||
@@ -500,13 +502,13 @@ func (b *Bitfinex) GetDerivativeStatusInfo(keys, startTime, endTime string, sort
|
||||
}
|
||||
|
||||
// GetTickerBatch returns all supported ticker information
|
||||
func (b *Bitfinex) GetTickerBatch() (map[string]Ticker, error) {
|
||||
func (b *Bitfinex) GetTickerBatch(ctx context.Context) (map[string]Ticker, error) {
|
||||
var response [][]interface{}
|
||||
|
||||
path := bitfinexAPIVersion2 + bitfinexTickerBatch +
|
||||
"?symbols=ALL"
|
||||
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &response, tickerBatch)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, tickerBatch)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -549,12 +551,12 @@ func (b *Bitfinex) GetTickerBatch() (map[string]Ticker, error) {
|
||||
}
|
||||
|
||||
// GetTicker returns ticker information for one symbol
|
||||
func (b *Bitfinex) GetTicker(symbol string) (Ticker, error) {
|
||||
func (b *Bitfinex) GetTicker(ctx context.Context, symbol string) (Ticker, error) {
|
||||
var response []interface{}
|
||||
|
||||
path := bitfinexAPIVersion2 + bitfinexTicker + symbol
|
||||
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &response, tickerFunction)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, tickerFunction)
|
||||
if err != nil {
|
||||
return Ticker{}, err
|
||||
}
|
||||
@@ -597,7 +599,7 @@ func (b *Bitfinex) GetTicker(symbol string) (Ticker, error) {
|
||||
// timestampStart is a millisecond timestamp
|
||||
// timestampEnd is a millisecond timestamp
|
||||
// reOrderResp reorders the returned data.
|
||||
func (b *Bitfinex) GetTrades(currencyPair string, limit, timestampStart, timestampEnd int64, reOrderResp bool) ([]Trade, error) {
|
||||
func (b *Bitfinex) GetTrades(ctx context.Context, currencyPair string, limit, timestampStart, timestampEnd int64, reOrderResp bool) ([]Trade, error) {
|
||||
v := url.Values{}
|
||||
if limit > 0 {
|
||||
v.Set("limit", strconv.FormatInt(limit, 10))
|
||||
@@ -619,7 +621,7 @@ func (b *Bitfinex) GetTrades(currencyPair string, limit, timestampStart, timesta
|
||||
path := bitfinexAPIVersion2 + bitfinexTrades + currencyPair + "/hist" + "?" + v.Encode()
|
||||
|
||||
var resp [][]interface{}
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &resp, tradeRateLimit)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &resp, tradeRateLimit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -663,14 +665,14 @@ func (b *Bitfinex) GetTrades(currencyPair string, limit, timestampStart, timesta
|
||||
// precision - P0,P1,P2,P3,R0
|
||||
// Values can contain limit amounts for both the asks and bids - Example
|
||||
// "len" = 100
|
||||
func (b *Bitfinex) GetOrderbook(symbol, precision string, limit int64) (Orderbook, error) {
|
||||
func (b *Bitfinex) GetOrderbook(ctx context.Context, symbol, precision string, limit int64) (Orderbook, error) {
|
||||
var u = url.Values{}
|
||||
if limit > 0 {
|
||||
u.Set("len", strconv.FormatInt(limit, 10))
|
||||
}
|
||||
path := bitfinexAPIVersion2 + bitfinexOrderbook + symbol + "/" + precision + "?" + u.Encode()
|
||||
var response [][]interface{}
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &response, orderbookFunction)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, orderbookFunction)
|
||||
if err != nil {
|
||||
return Orderbook{}, err
|
||||
}
|
||||
@@ -739,10 +741,10 @@ func (b *Bitfinex) GetOrderbook(symbol, precision string, limit int64) (Orderboo
|
||||
}
|
||||
|
||||
// GetStats returns various statistics about the requested pair
|
||||
func (b *Bitfinex) GetStats(symbol string) ([]Stat, error) {
|
||||
func (b *Bitfinex) GetStats(ctx context.Context, symbol string) ([]Stat, error) {
|
||||
var response []Stat
|
||||
path := bitfinexAPIVersion + bitfinexStats + symbol
|
||||
return response, b.SendHTTPRequest(exchange.RestSpot, path, &response, statsV1)
|
||||
return response, b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, statsV1)
|
||||
}
|
||||
|
||||
// GetFundingBook the entire margin funding book for both bids and asks sides
|
||||
@@ -750,11 +752,11 @@ func (b *Bitfinex) GetStats(symbol string) ([]Stat, error) {
|
||||
// symbol - example "USD"
|
||||
// WARNING: Orderbook now has this support, will be deprecated once a full
|
||||
// conversion to full V2 API update is done.
|
||||
func (b *Bitfinex) GetFundingBook(symbol string) (FundingBook, error) {
|
||||
func (b *Bitfinex) GetFundingBook(ctx context.Context, symbol string) (FundingBook, error) {
|
||||
response := FundingBook{}
|
||||
path := bitfinexAPIVersion + bitfinexLendbook + symbol
|
||||
|
||||
if err := b.SendHTTPRequest(exchange.RestSpot, path, &response, fundingbook); err != nil {
|
||||
if err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, fundingbook); err != nil {
|
||||
return response, err
|
||||
}
|
||||
|
||||
@@ -765,20 +767,20 @@ func (b *Bitfinex) GetFundingBook(symbol string) (FundingBook, error) {
|
||||
// currency: total amount provided and Flash Return Rate (in % by 365 days)
|
||||
// over time
|
||||
// Symbol - example "USD"
|
||||
func (b *Bitfinex) GetLends(symbol string, values url.Values) ([]Lends, error) {
|
||||
func (b *Bitfinex) GetLends(ctx context.Context, symbol string, values url.Values) ([]Lends, error) {
|
||||
var response []Lends
|
||||
path := common.EncodeURLValues(bitfinexAPIVersion+
|
||||
bitfinexLends+
|
||||
symbol,
|
||||
values)
|
||||
return response, b.SendHTTPRequest(exchange.RestSpot, path, &response, lends)
|
||||
return response, b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, lends)
|
||||
}
|
||||
|
||||
// GetCandles returns candle chart data
|
||||
// timeFrame values: '1m', '5m', '15m', '30m', '1h', '3h', '6h', '12h', '1D',
|
||||
// '7D', '14D', '1M'
|
||||
// section values: last or hist
|
||||
func (b *Bitfinex) GetCandles(symbol, timeFrame string, start, end int64, limit uint32, historic bool) ([]Candle, error) {
|
||||
func (b *Bitfinex) GetCandles(ctx context.Context, symbol, timeFrame string, start, end int64, limit uint32, historic bool) ([]Candle, error) {
|
||||
var fundingPeriod string
|
||||
if symbol[0] == 'f' {
|
||||
fundingPeriod = ":p30"
|
||||
@@ -812,7 +814,7 @@ func (b *Bitfinex) GetCandles(symbol, timeFrame string, start, end int64, limit
|
||||
}
|
||||
|
||||
var response [][]interface{}
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &response, candle)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, candle)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -835,7 +837,7 @@ func (b *Bitfinex) GetCandles(symbol, timeFrame string, start, end int64, limit
|
||||
path += "/last"
|
||||
|
||||
var response []interface{}
|
||||
err := b.SendHTTPRequest(exchange.RestSpot, path, &response, candle)
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &response, candle)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -879,7 +881,7 @@ func (b *Bitfinex) GetLiquidationFeed() error {
|
||||
// profit
|
||||
// Allowed time frames are 3h, 1w and 1M
|
||||
// Allowed symbols are trading pairs (e.g. tBTCUSD, tETHUSD and tGLOBAL:USD)
|
||||
func (b *Bitfinex) GetLeaderboard(key, timeframe, symbol string, sort, limit int, start, end string) ([]LeaderboardEntry, error) {
|
||||
func (b *Bitfinex) GetLeaderboard(ctx context.Context, key, timeframe, symbol string, sort, limit int, start, end string) ([]LeaderboardEntry, error) {
|
||||
validLeaderboardKey := func(input string) bool {
|
||||
switch input {
|
||||
case LeaderboardUnrealisedProfitPeriodDelta,
|
||||
@@ -915,7 +917,7 @@ func (b *Bitfinex) GetLeaderboard(key, timeframe, symbol string, sort, limit int
|
||||
}
|
||||
path = common.EncodeURLValues(path, vals)
|
||||
var resp []interface{}
|
||||
if err := b.SendHTTPRequest(exchange.RestSpot, path, &resp, leaderBoardReqRate); err != nil {
|
||||
if err := b.SendHTTPRequest(ctx, exchange.RestSpot, path, &resp, leaderBoardReqRate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -953,9 +955,9 @@ func (b *Bitfinex) GetForeignExchangeRate() error {
|
||||
}
|
||||
|
||||
// GetAccountFees returns information about your account trading fees
|
||||
func (b *Bitfinex) GetAccountFees() ([]AccountInfo, error) {
|
||||
func (b *Bitfinex) GetAccountFees(ctx context.Context) ([]AccountInfo, error) {
|
||||
var responses []AccountInfo
|
||||
return responses, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return responses, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexAccountInfo,
|
||||
nil,
|
||||
&responses,
|
||||
@@ -963,9 +965,9 @@ func (b *Bitfinex) GetAccountFees() ([]AccountInfo, error) {
|
||||
}
|
||||
|
||||
// GetWithdrawalFees - Gets all fee rates for withdrawals
|
||||
func (b *Bitfinex) GetWithdrawalFees() (AccountFees, error) {
|
||||
func (b *Bitfinex) GetWithdrawalFees(ctx context.Context) (AccountFees, error) {
|
||||
response := AccountFees{}
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexAccountFees,
|
||||
nil,
|
||||
&response,
|
||||
@@ -974,10 +976,10 @@ func (b *Bitfinex) GetWithdrawalFees() (AccountFees, error) {
|
||||
|
||||
// GetAccountSummary returns a 30-day summary of your trading volume and return
|
||||
// on margin funding
|
||||
func (b *Bitfinex) GetAccountSummary() (AccountSummary, error) {
|
||||
func (b *Bitfinex) GetAccountSummary(ctx context.Context) (AccountSummary, error) {
|
||||
response := AccountSummary{}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexAccountSummary,
|
||||
nil,
|
||||
&response,
|
||||
@@ -989,7 +991,7 @@ func (b *Bitfinex) GetAccountSummary() (AccountSummary, error) {
|
||||
// “tethers", "ethereumc", "zcash", "monero", "iota", "bcash"
|
||||
// WalletName - accepted: “trading”, “exchange”, “deposit”
|
||||
// renew - Default is 0. If set to 1, will return a new unused deposit address
|
||||
func (b *Bitfinex) NewDeposit(method, walletName string, renew int) (DepositResponse, error) {
|
||||
func (b *Bitfinex) NewDeposit(ctx context.Context, method, walletName string, renew int) (DepositResponse, error) {
|
||||
if !common.StringDataCompare(AcceptedWalletNames, walletName) {
|
||||
return DepositResponse{},
|
||||
fmt.Errorf("walletname: [%s] is not allowed, supported: %s",
|
||||
@@ -1003,7 +1005,7 @@ func (b *Bitfinex) NewDeposit(method, walletName string, renew int) (DepositResp
|
||||
req["wallet_name"] = walletName
|
||||
req["renew"] = renew
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexDeposit,
|
||||
req,
|
||||
&response,
|
||||
@@ -1012,9 +1014,9 @@ func (b *Bitfinex) NewDeposit(method, walletName string, renew int) (DepositResp
|
||||
|
||||
// GetKeyPermissions checks the permissions of the key being used to generate
|
||||
// this request.
|
||||
func (b *Bitfinex) GetKeyPermissions() (KeyPermissions, error) {
|
||||
func (b *Bitfinex) GetKeyPermissions(ctx context.Context) (KeyPermissions, error) {
|
||||
response := KeyPermissions{}
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexKeyPermissions,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1022,9 +1024,9 @@ func (b *Bitfinex) GetKeyPermissions() (KeyPermissions, error) {
|
||||
}
|
||||
|
||||
// GetMarginInfo shows your trading wallet information for margin trading
|
||||
func (b *Bitfinex) GetMarginInfo() ([]MarginInfo, error) {
|
||||
func (b *Bitfinex) GetMarginInfo(ctx context.Context) ([]MarginInfo, error) {
|
||||
var response []MarginInfo
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexMarginInfo,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1032,9 +1034,9 @@ func (b *Bitfinex) GetMarginInfo() ([]MarginInfo, error) {
|
||||
}
|
||||
|
||||
// GetAccountBalance returns full wallet balance information
|
||||
func (b *Bitfinex) GetAccountBalance() ([]Balance, error) {
|
||||
func (b *Bitfinex) GetAccountBalance(ctx context.Context) ([]Balance, error) {
|
||||
var response []Balance
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexBalances,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1046,7 +1048,7 @@ func (b *Bitfinex) GetAccountBalance() ([]Balance, error) {
|
||||
// Currency - example "BTC"
|
||||
// WalletFrom - example "exchange"
|
||||
// WalletTo - example "deposit"
|
||||
func (b *Bitfinex) WalletTransfer(amount float64, currency, walletFrom, walletTo string) (WalletTransfer, error) {
|
||||
func (b *Bitfinex) WalletTransfer(ctx context.Context, amount float64, currency, walletFrom, walletTo string) (WalletTransfer, error) {
|
||||
var response []WalletTransfer
|
||||
req := make(map[string]interface{})
|
||||
req["amount"] = strconv.FormatFloat(amount, 'f', -1, 64)
|
||||
@@ -1054,7 +1056,7 @@ func (b *Bitfinex) WalletTransfer(amount float64, currency, walletFrom, walletTo
|
||||
req["walletfrom"] = walletFrom
|
||||
req["walletto"] = walletTo
|
||||
|
||||
err := b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexTransfer,
|
||||
req,
|
||||
&response,
|
||||
@@ -1071,7 +1073,7 @@ func (b *Bitfinex) WalletTransfer(amount float64, currency, walletFrom, walletTo
|
||||
|
||||
// WithdrawCryptocurrency requests a withdrawal from one of your wallets.
|
||||
// For FIAT, use WithdrawFIAT
|
||||
func (b *Bitfinex) WithdrawCryptocurrency(wallet, address, paymentID string, amount float64, c currency.Code) (Withdrawal, error) {
|
||||
func (b *Bitfinex) WithdrawCryptocurrency(ctx context.Context, wallet, address, paymentID string, amount float64, c currency.Code) (Withdrawal, error) {
|
||||
var response []Withdrawal
|
||||
req := make(map[string]interface{})
|
||||
req["withdraw_type"] = b.ConvertSymbolToWithdrawalType(c)
|
||||
@@ -1082,7 +1084,7 @@ func (b *Bitfinex) WithdrawCryptocurrency(wallet, address, paymentID string, amo
|
||||
req["payment_id"] = paymentID
|
||||
}
|
||||
|
||||
err := b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexWithdrawal,
|
||||
req,
|
||||
&response,
|
||||
@@ -1099,7 +1101,7 @@ func (b *Bitfinex) WithdrawCryptocurrency(wallet, address, paymentID string, amo
|
||||
}
|
||||
|
||||
// WithdrawFIAT Sends an authenticated request to withdraw FIAT currency
|
||||
func (b *Bitfinex) WithdrawFIAT(withdrawalType, walletType string, withdrawRequest *withdraw.Request) (Withdrawal, error) {
|
||||
func (b *Bitfinex) WithdrawFIAT(ctx context.Context, withdrawalType, walletType string, withdrawRequest *withdraw.Request) (Withdrawal, error) {
|
||||
var response []Withdrawal
|
||||
req := make(map[string]interface{})
|
||||
|
||||
@@ -1127,7 +1129,7 @@ func (b *Bitfinex) WithdrawFIAT(withdrawalType, walletType string, withdrawReque
|
||||
req["intermediary_bank_swift"] = withdrawRequest.Fiat.IntermediarySwiftCode
|
||||
}
|
||||
|
||||
err := b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
err := b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexWithdrawal,
|
||||
req,
|
||||
&response,
|
||||
@@ -1145,7 +1147,7 @@ func (b *Bitfinex) WithdrawFIAT(withdrawalType, walletType string, withdrawReque
|
||||
|
||||
// NewOrder submits a new order and returns a order information
|
||||
// Major Upgrade needed on this function to include all query params
|
||||
func (b *Bitfinex) NewOrder(currencyPair, orderType string, amount, price float64, buy, hidden bool) (Order, error) {
|
||||
func (b *Bitfinex) NewOrder(ctx context.Context, currencyPair, orderType string, amount, price float64, buy, hidden bool) (Order, error) {
|
||||
if !common.StringDataCompare(AcceptedOrderType, orderType) {
|
||||
return Order{}, fmt.Errorf("order type %s not accepted", orderType)
|
||||
}
|
||||
@@ -1162,7 +1164,7 @@ func (b *Bitfinex) NewOrder(currencyPair, orderType string, amount, price float6
|
||||
req["side"] = order.Buy.Lower()
|
||||
}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderNew,
|
||||
req,
|
||||
&response,
|
||||
@@ -1170,12 +1172,12 @@ func (b *Bitfinex) NewOrder(currencyPair, orderType string, amount, price float6
|
||||
}
|
||||
|
||||
// NewOrderMulti allows several new orders at once
|
||||
func (b *Bitfinex) NewOrderMulti(orders []PlaceOrder) (OrderMultiResponse, error) {
|
||||
func (b *Bitfinex) NewOrderMulti(ctx context.Context, orders []PlaceOrder) (OrderMultiResponse, error) {
|
||||
response := OrderMultiResponse{}
|
||||
req := make(map[string]interface{})
|
||||
req["orders"] = orders
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderNewMulti,
|
||||
req,
|
||||
&response,
|
||||
@@ -1183,12 +1185,12 @@ func (b *Bitfinex) NewOrderMulti(orders []PlaceOrder) (OrderMultiResponse, error
|
||||
}
|
||||
|
||||
// CancelExistingOrder cancels a single order by OrderID
|
||||
func (b *Bitfinex) CancelExistingOrder(orderID int64) (Order, error) {
|
||||
func (b *Bitfinex) CancelExistingOrder(ctx context.Context, orderID int64) (Order, error) {
|
||||
response := Order{}
|
||||
req := make(map[string]interface{})
|
||||
req["order_id"] = orderID
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderCancel,
|
||||
req,
|
||||
&response,
|
||||
@@ -1196,12 +1198,12 @@ func (b *Bitfinex) CancelExistingOrder(orderID int64) (Order, error) {
|
||||
}
|
||||
|
||||
// CancelMultipleOrders cancels multiple orders
|
||||
func (b *Bitfinex) CancelMultipleOrders(orderIDs []int64) (string, error) {
|
||||
func (b *Bitfinex) CancelMultipleOrders(ctx context.Context, orderIDs []int64) (string, error) {
|
||||
response := GenericResponse{}
|
||||
req := make(map[string]interface{})
|
||||
req["order_ids"] = orderIDs
|
||||
|
||||
return response.Result, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response.Result, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderCancelMulti,
|
||||
req,
|
||||
nil,
|
||||
@@ -1209,10 +1211,10 @@ func (b *Bitfinex) CancelMultipleOrders(orderIDs []int64) (string, error) {
|
||||
}
|
||||
|
||||
// CancelAllExistingOrders cancels all active and open orders
|
||||
func (b *Bitfinex) CancelAllExistingOrders() (string, error) {
|
||||
func (b *Bitfinex) CancelAllExistingOrders(ctx context.Context) (string, error) {
|
||||
response := GenericResponse{}
|
||||
|
||||
return response.Result, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response.Result, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderCancelAll,
|
||||
nil,
|
||||
nil,
|
||||
@@ -1220,7 +1222,7 @@ func (b *Bitfinex) CancelAllExistingOrders() (string, error) {
|
||||
}
|
||||
|
||||
// ReplaceOrder replaces an older order with a new order
|
||||
func (b *Bitfinex) ReplaceOrder(orderID int64, symbol string, amount, price float64, buy bool, orderType string, hidden bool) (Order, error) {
|
||||
func (b *Bitfinex) ReplaceOrder(ctx context.Context, orderID int64, symbol string, amount, price float64, buy bool, orderType string, hidden bool) (Order, error) {
|
||||
response := Order{}
|
||||
req := make(map[string]interface{})
|
||||
req["order_id"] = orderID
|
||||
@@ -1237,7 +1239,7 @@ func (b *Bitfinex) ReplaceOrder(orderID int64, symbol string, amount, price floa
|
||||
req["side"] = order.Sell.Lower()
|
||||
}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderCancelReplace,
|
||||
req,
|
||||
&response,
|
||||
@@ -1245,12 +1247,12 @@ func (b *Bitfinex) ReplaceOrder(orderID int64, symbol string, amount, price floa
|
||||
}
|
||||
|
||||
// GetOrderStatus returns order status information
|
||||
func (b *Bitfinex) GetOrderStatus(orderID int64) (Order, error) {
|
||||
func (b *Bitfinex) GetOrderStatus(ctx context.Context, orderID int64) (Order, error) {
|
||||
orderStatus := Order{}
|
||||
req := make(map[string]interface{})
|
||||
req["order_id"] = orderID
|
||||
|
||||
return orderStatus, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return orderStatus, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderStatus,
|
||||
req,
|
||||
&orderStatus,
|
||||
@@ -1258,12 +1260,12 @@ func (b *Bitfinex) GetOrderStatus(orderID int64) (Order, error) {
|
||||
}
|
||||
|
||||
// GetInactiveOrders returns order status information
|
||||
func (b *Bitfinex) GetInactiveOrders() ([]Order, error) {
|
||||
func (b *Bitfinex) GetInactiveOrders(ctx context.Context) ([]Order, error) {
|
||||
var response []Order
|
||||
req := make(map[string]interface{})
|
||||
req["limit"] = "100"
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexInactiveOrders,
|
||||
req,
|
||||
&response,
|
||||
@@ -1271,9 +1273,9 @@ func (b *Bitfinex) GetInactiveOrders() ([]Order, error) {
|
||||
}
|
||||
|
||||
// GetOpenOrders returns all active orders and statuses
|
||||
func (b *Bitfinex) GetOpenOrders() ([]Order, error) {
|
||||
func (b *Bitfinex) GetOpenOrders(ctx context.Context) ([]Order, error) {
|
||||
var response []Order
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrders,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1281,10 +1283,10 @@ func (b *Bitfinex) GetOpenOrders() ([]Order, error) {
|
||||
}
|
||||
|
||||
// GetActivePositions returns an array of active positions
|
||||
func (b *Bitfinex) GetActivePositions() ([]Position, error) {
|
||||
func (b *Bitfinex) GetActivePositions(ctx context.Context) ([]Position, error) {
|
||||
var response []Position
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexPositions,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1292,12 +1294,12 @@ func (b *Bitfinex) GetActivePositions() ([]Position, error) {
|
||||
}
|
||||
|
||||
// ClaimPosition allows positions to be claimed
|
||||
func (b *Bitfinex) ClaimPosition(positionID int) (Position, error) {
|
||||
func (b *Bitfinex) ClaimPosition(ctx context.Context, positionID int) (Position, error) {
|
||||
response := Position{}
|
||||
req := make(map[string]interface{})
|
||||
req["position_id"] = positionID
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexClaimPosition,
|
||||
nil,
|
||||
nil,
|
||||
@@ -1305,7 +1307,7 @@ func (b *Bitfinex) ClaimPosition(positionID int) (Position, error) {
|
||||
}
|
||||
|
||||
// GetBalanceHistory returns balance history for the account
|
||||
func (b *Bitfinex) GetBalanceHistory(symbol string, timeSince, timeUntil time.Time, limit int, wallet string) ([]BalanceHistory, error) {
|
||||
func (b *Bitfinex) GetBalanceHistory(ctx context.Context, symbol string, timeSince, timeUntil time.Time, limit int, wallet string) ([]BalanceHistory, error) {
|
||||
var response []BalanceHistory
|
||||
req := make(map[string]interface{})
|
||||
req["currency"] = symbol
|
||||
@@ -1323,7 +1325,7 @@ func (b *Bitfinex) GetBalanceHistory(symbol string, timeSince, timeUntil time.Ti
|
||||
req["wallet"] = wallet
|
||||
}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexHistory,
|
||||
req,
|
||||
&response,
|
||||
@@ -1331,7 +1333,7 @@ func (b *Bitfinex) GetBalanceHistory(symbol string, timeSince, timeUntil time.Ti
|
||||
}
|
||||
|
||||
// GetMovementHistory returns an array of past deposits and withdrawals
|
||||
func (b *Bitfinex) GetMovementHistory(symbol, method string, timeSince, timeUntil time.Time, limit int) ([]MovementHistory, error) {
|
||||
func (b *Bitfinex) GetMovementHistory(ctx context.Context, symbol, method string, timeSince, timeUntil time.Time, limit int) ([]MovementHistory, error) {
|
||||
var response []MovementHistory
|
||||
req := make(map[string]interface{})
|
||||
req["currency"] = symbol
|
||||
@@ -1349,7 +1351,7 @@ func (b *Bitfinex) GetMovementHistory(symbol, method string, timeSince, timeUnti
|
||||
req["limit"] = limit
|
||||
}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexHistoryMovements,
|
||||
req,
|
||||
&response,
|
||||
@@ -1357,7 +1359,7 @@ func (b *Bitfinex) GetMovementHistory(symbol, method string, timeSince, timeUnti
|
||||
}
|
||||
|
||||
// GetTradeHistory returns past executed trades
|
||||
func (b *Bitfinex) GetTradeHistory(currencyPair string, timestamp, until time.Time, limit, reverse int) ([]TradeHistory, error) {
|
||||
func (b *Bitfinex) GetTradeHistory(ctx context.Context, currencyPair string, timestamp, until time.Time, limit, reverse int) ([]TradeHistory, error) {
|
||||
var response []TradeHistory
|
||||
req := make(map[string]interface{})
|
||||
req["currency"] = currencyPair
|
||||
@@ -1373,7 +1375,7 @@ func (b *Bitfinex) GetTradeHistory(currencyPair string, timestamp, until time.Ti
|
||||
req["reverse"] = reverse
|
||||
}
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexTradeHistory,
|
||||
req,
|
||||
&response,
|
||||
@@ -1381,7 +1383,7 @@ func (b *Bitfinex) GetTradeHistory(currencyPair string, timestamp, until time.Ti
|
||||
}
|
||||
|
||||
// NewOffer submits a new offer
|
||||
func (b *Bitfinex) NewOffer(symbol string, amount, rate float64, period int64, direction string) (Offer, error) {
|
||||
func (b *Bitfinex) NewOffer(ctx context.Context, symbol string, amount, rate float64, period int64, direction string) (Offer, error) {
|
||||
response := Offer{}
|
||||
req := make(map[string]interface{})
|
||||
req["currency"] = symbol
|
||||
@@ -1390,7 +1392,7 @@ func (b *Bitfinex) NewOffer(symbol string, amount, rate float64, period int64, d
|
||||
req["period"] = period
|
||||
req["direction"] = direction
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOfferNew,
|
||||
req,
|
||||
&response,
|
||||
@@ -1398,12 +1400,12 @@ func (b *Bitfinex) NewOffer(symbol string, amount, rate float64, period int64, d
|
||||
}
|
||||
|
||||
// CancelOffer cancels offer by offerID
|
||||
func (b *Bitfinex) CancelOffer(offerID int64) (Offer, error) {
|
||||
func (b *Bitfinex) CancelOffer(ctx context.Context, offerID int64) (Offer, error) {
|
||||
response := Offer{}
|
||||
req := make(map[string]interface{})
|
||||
req["offer_id"] = offerID
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOfferCancel,
|
||||
req,
|
||||
&response,
|
||||
@@ -1412,12 +1414,12 @@ func (b *Bitfinex) CancelOffer(offerID int64) (Offer, error) {
|
||||
|
||||
// GetOfferStatus checks offer status whether it has been cancelled, execute or
|
||||
// is still active
|
||||
func (b *Bitfinex) GetOfferStatus(offerID int64) (Offer, error) {
|
||||
func (b *Bitfinex) GetOfferStatus(ctx context.Context, offerID int64) (Offer, error) {
|
||||
response := Offer{}
|
||||
req := make(map[string]interface{})
|
||||
req["offer_id"] = offerID
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOrderStatus,
|
||||
req,
|
||||
&response,
|
||||
@@ -1425,10 +1427,10 @@ func (b *Bitfinex) GetOfferStatus(offerID int64) (Offer, error) {
|
||||
}
|
||||
|
||||
// GetActiveCredits returns all available credits
|
||||
func (b *Bitfinex) GetActiveCredits() ([]Offer, error) {
|
||||
func (b *Bitfinex) GetActiveCredits(ctx context.Context) ([]Offer, error) {
|
||||
var response []Offer
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexActiveCredits,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1436,10 +1438,10 @@ func (b *Bitfinex) GetActiveCredits() ([]Offer, error) {
|
||||
}
|
||||
|
||||
// GetActiveOffers returns all current active offers
|
||||
func (b *Bitfinex) GetActiveOffers() ([]Offer, error) {
|
||||
func (b *Bitfinex) GetActiveOffers(ctx context.Context) ([]Offer, error) {
|
||||
var response []Offer
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexOffers,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1447,10 +1449,10 @@ func (b *Bitfinex) GetActiveOffers() ([]Offer, error) {
|
||||
}
|
||||
|
||||
// GetActiveMarginFunding returns an array of active margin funds
|
||||
func (b *Bitfinex) GetActiveMarginFunding() ([]MarginFunds, error) {
|
||||
func (b *Bitfinex) GetActiveMarginFunding(ctx context.Context) ([]MarginFunds, error) {
|
||||
var response []MarginFunds
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexMarginActiveFunds,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1459,10 +1461,10 @@ func (b *Bitfinex) GetActiveMarginFunding() ([]MarginFunds, error) {
|
||||
|
||||
// GetUnusedMarginFunds returns an array of funding borrowed but not currently
|
||||
// used
|
||||
func (b *Bitfinex) GetUnusedMarginFunds() ([]MarginFunds, error) {
|
||||
func (b *Bitfinex) GetUnusedMarginFunds(ctx context.Context) ([]MarginFunds, error) {
|
||||
var response []MarginFunds
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexMarginUnusedFunds,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1471,10 +1473,10 @@ func (b *Bitfinex) GetUnusedMarginFunds() ([]MarginFunds, error) {
|
||||
|
||||
// GetMarginTotalTakenFunds returns an array of active funding used in a
|
||||
// position
|
||||
func (b *Bitfinex) GetMarginTotalTakenFunds() ([]MarginTotalTakenFunds, error) {
|
||||
func (b *Bitfinex) GetMarginTotalTakenFunds(ctx context.Context) ([]MarginTotalTakenFunds, error) {
|
||||
var response []MarginTotalTakenFunds
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexMarginTotalFunds,
|
||||
nil,
|
||||
&response,
|
||||
@@ -1482,12 +1484,12 @@ func (b *Bitfinex) GetMarginTotalTakenFunds() ([]MarginTotalTakenFunds, error) {
|
||||
}
|
||||
|
||||
// CloseMarginFunding closes an unused or used taken fund
|
||||
func (b *Bitfinex) CloseMarginFunding(swapID int64) (Offer, error) {
|
||||
func (b *Bitfinex) CloseMarginFunding(ctx context.Context, swapID int64) (Offer, error) {
|
||||
response := Offer{}
|
||||
req := make(map[string]interface{})
|
||||
req["swap_id"] = swapID
|
||||
|
||||
return response, b.SendAuthenticatedHTTPRequest(exchange.RestSpot, http.MethodPost,
|
||||
return response, b.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, http.MethodPost,
|
||||
bitfinexMarginClose,
|
||||
req,
|
||||
&response,
|
||||
@@ -1495,7 +1497,7 @@ func (b *Bitfinex) CloseMarginFunding(swapID int64) (Offer, error) {
|
||||
}
|
||||
|
||||
// SendHTTPRequest sends an unauthenticated request
|
||||
func (b *Bitfinex) SendHTTPRequest(ep exchange.URL, path string, result interface{}, e request.EndpointLimit) error {
|
||||
func (b *Bitfinex) SendHTTPRequest(ctx context.Context, ep exchange.URL, path string, result interface{}, e request.EndpointLimit) error {
|
||||
endpoint, err := b.API.Endpoints.GetURL(ep)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1508,14 +1510,14 @@ func (b *Bitfinex) SendHTTPRequest(ep exchange.URL, path string, result interfac
|
||||
HTTPDebugging: b.HTTPDebugging,
|
||||
HTTPRecording: b.HTTPRecording}
|
||||
|
||||
return b.SendPayload(context.Background(), e, func() (*request.Item, error) {
|
||||
return b.SendPayload(ctx, e, func() (*request.Item, error) {
|
||||
return item, nil
|
||||
})
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequest sends an autheticated http request and json
|
||||
// unmarshals result to a supplied variable
|
||||
func (b *Bitfinex) SendAuthenticatedHTTPRequest(ep exchange.URL, method, path string, params map[string]interface{}, result interface{}, endpoint request.EndpointLimit) error {
|
||||
func (b *Bitfinex) SendAuthenticatedHTTPRequest(ctx context.Context, ep exchange.URL, method, path string, params map[string]interface{}, result interface{}, endpoint request.EndpointLimit) error {
|
||||
if !b.AllowAuthenticatedRequest() {
|
||||
return fmt.Errorf("%s %w", b.Name, exchange.ErrAuthenticatedRequestWithoutCredentialsSet)
|
||||
}
|
||||
@@ -1526,7 +1528,7 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequest(ep exchange.URL, method, path st
|
||||
}
|
||||
|
||||
fullPath := ePoint + bitfinexAPIVersion + path
|
||||
return b.SendPayload(context.Background(), endpoint, func() (*request.Item, error) {
|
||||
return b.SendPayload(ctx, endpoint, func() (*request.Item, error) {
|
||||
n := b.Requester.GetNonce(true)
|
||||
req := make(map[string]interface{})
|
||||
req["request"] = bitfinexAPIVersion + path
|
||||
@@ -1568,7 +1570,7 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequest(ep exchange.URL, method, path st
|
||||
|
||||
// SendAuthenticatedHTTPRequestV2 sends an autheticated http request and json
|
||||
// unmarshals result to a supplied variable
|
||||
func (b *Bitfinex) SendAuthenticatedHTTPRequestV2(ep exchange.URL, method, path string, params map[string]interface{}, result interface{}, endpoint request.EndpointLimit) error {
|
||||
func (b *Bitfinex) SendAuthenticatedHTTPRequestV2(ctx context.Context, ep exchange.URL, method, path string, params map[string]interface{}, result interface{}, endpoint request.EndpointLimit) error {
|
||||
if !b.AllowAuthenticatedRequest() {
|
||||
return fmt.Errorf("%s %w", b.Name, exchange.ErrAuthenticatedRequestWithoutCredentialsSet)
|
||||
}
|
||||
@@ -1577,7 +1579,7 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequestV2(ep exchange.URL, method, path
|
||||
return err
|
||||
}
|
||||
|
||||
return b.SendPayload(context.Background(), endpoint, func() (*request.Item, error) {
|
||||
return b.SendPayload(ctx, endpoint, func() (*request.Item, error) {
|
||||
var body io.Reader
|
||||
var payload []byte
|
||||
if len(params) != 0 {
|
||||
@@ -1623,12 +1625,12 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequestV2(ep exchange.URL, method, path
|
||||
}
|
||||
|
||||
// GetFee returns an estimate of fee based on type of transaction
|
||||
func (b *Bitfinex) GetFee(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
func (b *Bitfinex) GetFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
var fee float64
|
||||
|
||||
switch feeBuilder.FeeType {
|
||||
case exchange.CryptocurrencyTradeFee:
|
||||
accountInfos, err := b.GetAccountFees()
|
||||
accountInfos, err := b.GetAccountFees(ctx)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -1644,7 +1646,7 @@ func (b *Bitfinex) GetFee(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
//TODO: fee is charged when < $1000USD is transferred, need to infer value in some way
|
||||
fee = 0
|
||||
case exchange.CryptocurrencyWithdrawalFee:
|
||||
acc, err := b.GetWithdrawalFees()
|
||||
acc, err := b.GetWithdrawalFees(ctx)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -1761,8 +1763,8 @@ func (b *Bitfinex) ConvertSymbolToWithdrawalType(c currency.Code) string {
|
||||
}
|
||||
|
||||
// ConvertSymbolToDepositMethod returns a converted currency deposit method
|
||||
func (b *Bitfinex) ConvertSymbolToDepositMethod(c currency.Code) (string, error) {
|
||||
if err := b.PopulateAcceptableMethods(); err != nil {
|
||||
func (b *Bitfinex) ConvertSymbolToDepositMethod(ctx context.Context, c currency.Code) (string, error) {
|
||||
if err := b.PopulateAcceptableMethods(ctx); err != nil {
|
||||
return "", err
|
||||
}
|
||||
method, ok := AcceptableMethods[c.String()]
|
||||
@@ -1776,10 +1778,10 @@ func (b *Bitfinex) ConvertSymbolToDepositMethod(c currency.Code) (string, error)
|
||||
|
||||
// PopulateAcceptableMethods retrieves all accepted currency strings and
|
||||
// populates a map to check
|
||||
func (b *Bitfinex) PopulateAcceptableMethods() error {
|
||||
func (b *Bitfinex) PopulateAcceptableMethods(ctx context.Context) error {
|
||||
if len(AcceptableMethods) == 0 {
|
||||
var response [][][2]string
|
||||
err := b.SendHTTPRequest(exchange.RestSpot,
|
||||
err := b.SendHTTPRequest(ctx, exchange.RestSpot,
|
||||
bitfinexAPIVersion2+bitfinexDepositMethod,
|
||||
&response,
|
||||
configs)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package bitfinex
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -65,7 +66,7 @@ func TestGetV2MarginFunding(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("api keys are not set or invalid")
|
||||
}
|
||||
_, err := b.GetV2MarginFunding("fUSD", "2", 2)
|
||||
_, err := b.GetV2MarginFunding(context.Background(), "fUSD", "2", 2)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -75,15 +76,15 @@ func TestGetV2MarginInfo(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("api keys are not set or invalid")
|
||||
}
|
||||
_, err := b.GetV2MarginInfo("base")
|
||||
_, err := b.GetV2MarginInfo(context.Background(), "base")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
_, err = b.GetV2MarginInfo("tBTCUSD")
|
||||
_, err = b.GetV2MarginInfo(context.Background(), "tBTCUSD")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
_, err = b.GetV2MarginInfo("sym_all")
|
||||
_, err = b.GetV2MarginInfo(context.Background(), "sym_all")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -94,7 +95,7 @@ func TestGetAccountInfoV2(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("api keys are not set or invalid")
|
||||
}
|
||||
_, err := b.GetAccountInfoV2()
|
||||
_, err := b.GetAccountInfoV2(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -104,7 +105,7 @@ func TestGetV2FundingInfo(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("api keys are not set or invalid")
|
||||
}
|
||||
_, err := b.GetV2FundingInfo("fUST")
|
||||
_, err := b.GetV2FundingInfo(context.Background(), "fUST")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -115,7 +116,7 @@ func TestGetV2Balances(t *testing.T) {
|
||||
if !areTestAPIKeysSet() {
|
||||
t.Skip("api keys are not set or invalid")
|
||||
}
|
||||
_, err := b.GetV2Balances()
|
||||
_, err := b.GetV2Balances(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -123,7 +124,7 @@ func TestGetV2Balances(t *testing.T) {
|
||||
|
||||
func TestGetDerivativeStatusInfo(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetDerivativeStatusInfo("ALL", "", "", 0, 0)
|
||||
_, err := b.GetDerivativeStatusInfo(context.Background(), "ALL", "", "", 0, 0)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -131,7 +132,7 @@ func TestGetDerivativeStatusInfo(t *testing.T) {
|
||||
|
||||
func TestGetMarginPairs(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetMarginPairs()
|
||||
_, err := b.GetMarginPairs(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -162,7 +163,7 @@ func TestAppendOptionalDelimiter(t *testing.T) {
|
||||
|
||||
func TestGetPlatformStatus(t *testing.T) {
|
||||
t.Parallel()
|
||||
result, err := b.GetPlatformStatus()
|
||||
result, err := b.GetPlatformStatus(context.Background())
|
||||
if err != nil {
|
||||
t.Errorf("TestGetPlatformStatus error: %s", err)
|
||||
}
|
||||
@@ -174,7 +175,7 @@ func TestGetPlatformStatus(t *testing.T) {
|
||||
|
||||
func TestGetTickerBatch(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetTickerBatch()
|
||||
_, err := b.GetTickerBatch(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -182,12 +183,12 @@ func TestGetTickerBatch(t *testing.T) {
|
||||
|
||||
func TestGetTicker(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetTicker("tBTCUSD")
|
||||
_, err := b.GetTicker(context.Background(), "tBTCUSD")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetTicker("fUSD")
|
||||
_, err = b.GetTicker(context.Background(), "fUSD")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -196,7 +197,7 @@ func TestGetTicker(t *testing.T) {
|
||||
func TestGetTrades(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetTrades("tBTCUSD", 5, 0, 0, false)
|
||||
_, err := b.GetTrades(context.Background(), "tBTCUSD", 5, 0, 0, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -204,27 +205,27 @@ func TestGetTrades(t *testing.T) {
|
||||
|
||||
func TestGetOrderbook(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetOrderbook("tBTCUSD", "R0", 1)
|
||||
_, err := b.GetOrderbook(context.Background(), "tBTCUSD", "R0", 1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetOrderbook("fUSD", "R0", 1)
|
||||
_, err = b.GetOrderbook(context.Background(), "fUSD", "R0", 1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetOrderbook("tBTCUSD", "P0", 1)
|
||||
_, err = b.GetOrderbook(context.Background(), "tBTCUSD", "P0", 1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetOrderbook("fUSD", "P0", 1)
|
||||
_, err = b.GetOrderbook(context.Background(), "fUSD", "P0", 1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = b.GetOrderbook("tLINK:UST", "P0", 1)
|
||||
_, err = b.GetOrderbook(context.Background(), "tLINK:UST", "P0", 1)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -232,7 +233,7 @@ func TestGetOrderbook(t *testing.T) {
|
||||
|
||||
func TestGetStats(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetStats("btcusd")
|
||||
_, err := b.GetStats(context.Background(), "btcusd")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -240,7 +241,7 @@ func TestGetStats(t *testing.T) {
|
||||
|
||||
func TestGetFundingBook(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetFundingBook("usd")
|
||||
_, err := b.GetFundingBook(context.Background(), "usd")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -248,7 +249,7 @@ func TestGetFundingBook(t *testing.T) {
|
||||
|
||||
func TestGetLends(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetLends("usd", nil)
|
||||
_, err := b.GetLends(context.Background(), "usd", nil)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -256,7 +257,7 @@ func TestGetLends(t *testing.T) {
|
||||
|
||||
func TestGetCandles(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetCandles("fUSD", "1m", 0, 0, 10, true)
|
||||
_, err := b.GetCandles(context.Background(), "fUSD", "1m", 0, 0, 10, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -265,12 +266,13 @@ func TestGetCandles(t *testing.T) {
|
||||
func TestGetLeaderboard(t *testing.T) {
|
||||
t.Parallel()
|
||||
// Test invalid key
|
||||
_, err := b.GetLeaderboard("", "", "", 0, 0, "", "")
|
||||
_, err := b.GetLeaderboard(context.Background(), "", "", "", 0, 0, "", "")
|
||||
if err == nil {
|
||||
t.Error("an error should have been thrown for an invalid key")
|
||||
}
|
||||
// Test default
|
||||
_, err = b.GetLeaderboard(LeaderboardUnrealisedProfitInception,
|
||||
_, err = b.GetLeaderboard(context.Background(),
|
||||
LeaderboardUnrealisedProfitInception,
|
||||
"1M",
|
||||
"tGLOBAL:USD",
|
||||
0,
|
||||
@@ -282,7 +284,8 @@ func TestGetLeaderboard(t *testing.T) {
|
||||
}
|
||||
// Test params
|
||||
var result []LeaderboardEntry
|
||||
result, err = b.GetLeaderboard(LeaderboardUnrealisedProfitInception,
|
||||
result, err = b.GetLeaderboard(context.Background(),
|
||||
LeaderboardUnrealisedProfitInception,
|
||||
"1M",
|
||||
"tGLOBAL:USD",
|
||||
-1,
|
||||
@@ -303,7 +306,7 @@ func TestGetAccountFees(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.UpdateAccountInfo(asset.Spot)
|
||||
_, err := b.UpdateAccountInfo(context.Background(), asset.Spot)
|
||||
if err != nil {
|
||||
t.Error("GetAccountInfo error", err)
|
||||
}
|
||||
@@ -314,7 +317,7 @@ func TestGetWithdrawalFee(t *testing.T) {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
_, err := b.GetWithdrawalFees()
|
||||
_, err := b.GetWithdrawalFees(context.Background())
|
||||
if err != nil {
|
||||
t.Error("GetAccountInfo error", err)
|
||||
}
|
||||
@@ -326,7 +329,7 @@ func TestGetAccountSummary(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountSummary()
|
||||
_, err := b.GetAccountSummary(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetAccountSummary() Expected error")
|
||||
}
|
||||
@@ -337,17 +340,17 @@ func TestNewDeposit(t *testing.T) {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
_, err := b.NewDeposit("blabla", "testwallet", 0)
|
||||
_, err := b.NewDeposit(context.Background(), "blabla", "testwallet", 0)
|
||||
if err == nil {
|
||||
t.Error("NewDeposit() Expected error")
|
||||
}
|
||||
|
||||
_, err = b.NewDeposit("bitcoin", "testwallet", 0)
|
||||
_, err = b.NewDeposit(context.Background(), "bitcoin", "testwallet", 0)
|
||||
if err == nil {
|
||||
t.Error("NewDeposit() Expected error")
|
||||
}
|
||||
|
||||
_, err = b.NewDeposit("bitcoin", "exchange", 0)
|
||||
_, err = b.NewDeposit(context.Background(), "bitcoin", "exchange", 0)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -359,7 +362,7 @@ func TestGetKeyPermissions(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetKeyPermissions()
|
||||
_, err := b.GetKeyPermissions(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -371,7 +374,7 @@ func TestGetMarginInfo(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMarginInfo()
|
||||
_, err := b.GetMarginInfo(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -383,7 +386,7 @@ func TestGetAccountBalance(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountBalance()
|
||||
_, err := b.GetAccountBalance(context.Background())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -395,7 +398,7 @@ func TestGetAccountInfo(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.FetchAccountInfo(asset.Spot)
|
||||
_, err := b.FetchAccountInfo(context.Background(), asset.Spot)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -407,7 +410,7 @@ func TestWalletTransfer(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.WalletTransfer(0.01, "btc", "bla", "bla")
|
||||
_, err := b.WalletTransfer(context.Background(), 0.01, "btc", "bla", "bla")
|
||||
if err == nil {
|
||||
t.Error("error cannot be nil")
|
||||
}
|
||||
@@ -419,7 +422,8 @@ func TestNewOrder(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.NewOrder("BTCUSD",
|
||||
_, err := b.NewOrder(context.Background(),
|
||||
"BTCUSD",
|
||||
order.Limit.Lower(),
|
||||
-1,
|
||||
2,
|
||||
@@ -436,14 +440,14 @@ func TestUpdateTicker(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.UpdateTicker(pair, asset.Spot)
|
||||
_, err = b.UpdateTicker(context.Background(), pair, asset.Spot)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateTickers(t *testing.T) {
|
||||
err := b.UpdateTickers(asset.Spot)
|
||||
err := b.UpdateTickers(context.Background(), asset.Spot)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -466,7 +470,7 @@ func TestNewOrderMulti(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := b.NewOrderMulti(newOrder)
|
||||
_, err := b.NewOrderMulti(context.Background(), newOrder)
|
||||
if err == nil {
|
||||
t.Error("NewOrderMulti() Expected error")
|
||||
}
|
||||
@@ -478,7 +482,7 @@ func TestCancelOrder(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelExistingOrder(1337)
|
||||
_, err := b.CancelExistingOrder(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("CancelExistingOrder() Expected error")
|
||||
}
|
||||
@@ -490,7 +494,7 @@ func TestCancelMultipleOrders(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelMultipleOrders([]int64{1337, 1336})
|
||||
_, err := b.CancelMultipleOrders(context.Background(), []int64{1337, 1336})
|
||||
if err == nil {
|
||||
t.Error("CancelMultipleOrders() Expected error")
|
||||
}
|
||||
@@ -502,7 +506,7 @@ func TestCancelAllOrders(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelAllExistingOrders()
|
||||
_, err := b.CancelAllExistingOrders(context.Background())
|
||||
if err == nil {
|
||||
t.Error("CancelAllExistingOrders() Expected error")
|
||||
}
|
||||
@@ -514,7 +518,7 @@ func TestReplaceOrder(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.ReplaceOrder(1337, "BTCUSD",
|
||||
_, err := b.ReplaceOrder(context.Background(), 1337, "BTCUSD",
|
||||
1, 1, true, order.Limit.Lower(), false)
|
||||
if err == nil {
|
||||
t.Error("ReplaceOrder() Expected error")
|
||||
@@ -527,7 +531,7 @@ func TestGetOrderStatus(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetOrderStatus(1337)
|
||||
_, err := b.GetOrderStatus(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("GetOrderStatus() Expected error")
|
||||
}
|
||||
@@ -539,7 +543,7 @@ func TestGetOpenOrders(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetOpenOrders()
|
||||
_, err := b.GetOpenOrders(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetOpenOrders() Expectederror")
|
||||
}
|
||||
@@ -551,7 +555,7 @@ func TestGetActivePositions(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActivePositions()
|
||||
_, err := b.GetActivePositions(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetActivePositions() Expected error")
|
||||
}
|
||||
@@ -563,7 +567,7 @@ func TestClaimPosition(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.ClaimPosition(1337)
|
||||
_, err := b.ClaimPosition(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("ClaimPosition() Expected error")
|
||||
}
|
||||
@@ -574,7 +578,8 @@ func TestGetBalanceHistory(t *testing.T) {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
_, err := b.GetBalanceHistory("USD", time.Time{}, time.Time{}, 1, "deposit")
|
||||
_, err := b.GetBalanceHistory(context.Background(),
|
||||
"USD", time.Time{}, time.Time{}, 1, "deposit")
|
||||
if err == nil {
|
||||
t.Error("GetBalanceHistory() Expected error")
|
||||
}
|
||||
@@ -586,7 +591,7 @@ func TestGetMovementHistory(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMovementHistory("USD", "bitcoin", time.Time{}, time.Time{}, 1)
|
||||
_, err := b.GetMovementHistory(context.Background(), "USD", "bitcoin", time.Time{}, time.Time{}, 1)
|
||||
if err == nil {
|
||||
t.Error("GetMovementHistory() Expected error")
|
||||
}
|
||||
@@ -597,7 +602,8 @@ func TestGetTradeHistory(t *testing.T) {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
_, err := b.GetTradeHistory("BTCUSD", time.Time{}, time.Time{}, 1, 0)
|
||||
_, err := b.GetTradeHistory(context.Background(),
|
||||
"BTCUSD", time.Time{}, time.Time{}, 1, 0)
|
||||
if err == nil {
|
||||
t.Error("GetTradeHistory() Expected error")
|
||||
}
|
||||
@@ -609,7 +615,7 @@ func TestNewOffer(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.NewOffer("BTC", 1, 1, 1, "loan")
|
||||
_, err := b.NewOffer(context.Background(), "BTC", 1, 1, 1, "loan")
|
||||
if err == nil {
|
||||
t.Error("NewOffer() Expected error")
|
||||
}
|
||||
@@ -621,7 +627,7 @@ func TestCancelOffer(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelOffer(1337)
|
||||
_, err := b.CancelOffer(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("CancelOffer() Expected error")
|
||||
}
|
||||
@@ -633,7 +639,7 @@ func TestGetOfferStatus(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetOfferStatus(1337)
|
||||
_, err := b.GetOfferStatus(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("NewOffer() Expected error")
|
||||
}
|
||||
@@ -645,7 +651,7 @@ func TestGetActiveCredits(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveCredits()
|
||||
_, err := b.GetActiveCredits(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetActiveCredits() Expected error")
|
||||
}
|
||||
@@ -657,7 +663,7 @@ func TestGetActiveOffers(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveOffers()
|
||||
_, err := b.GetActiveOffers(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetActiveOffers() Expected error")
|
||||
}
|
||||
@@ -669,7 +675,7 @@ func TestGetActiveMarginFunding(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveMarginFunding()
|
||||
_, err := b.GetActiveMarginFunding(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetActiveMarginFunding() Expected error")
|
||||
}
|
||||
@@ -681,7 +687,7 @@ func TestGetUnusedMarginFunds(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetUnusedMarginFunds()
|
||||
_, err := b.GetUnusedMarginFunds(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetUnusedMarginFunds() Expected error")
|
||||
}
|
||||
@@ -693,7 +699,7 @@ func TestGetMarginTotalTakenFunds(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMarginTotalTakenFunds()
|
||||
_, err := b.GetMarginTotalTakenFunds(context.Background())
|
||||
if err == nil {
|
||||
t.Error("GetMarginTotalTakenFunds() Expected error")
|
||||
}
|
||||
@@ -705,7 +711,7 @@ func TestCloseMarginFunding(t *testing.T) {
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CloseMarginFunding(1337)
|
||||
_, err := b.CloseMarginFunding(context.Background(), 1337)
|
||||
if err == nil {
|
||||
t.Error("CloseMarginFunding() Expected error")
|
||||
}
|
||||
@@ -723,7 +729,7 @@ func setFeeBuilder() *exchange.FeeBuilder {
|
||||
// TestGetFeeByTypeOfflineTradeFee logic test
|
||||
func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
|
||||
var feeBuilder = setFeeBuilder()
|
||||
_, err := b.GetFeeByType(feeBuilder)
|
||||
_, err := b.GetFeeByType(context.Background(), feeBuilder)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -744,7 +750,7 @@ func TestGetFee(t *testing.T) {
|
||||
|
||||
if areTestAPIKeysSet() {
|
||||
// CryptocurrencyTradeFee Basic
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@@ -752,28 +758,28 @@ func TestGetFee(t *testing.T) {
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.Amount = 1000
|
||||
feeBuilder.PurchasePrice = 1000
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// CryptocurrencyTradeFee IsMaker
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.IsMaker = true
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// CryptocurrencyTradeFee Negative purchase price
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.PurchasePrice = -1000
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// CryptocurrencyWithdrawalFee Basic
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@@ -781,7 +787,7 @@ func TestGetFee(t *testing.T) {
|
||||
// CryptocurrencyDepositFee Basic
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.FeeType = exchange.CryptocurrencyDepositFee
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@@ -789,7 +795,7 @@ func TestGetFee(t *testing.T) {
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.FeeType = exchange.InternationalBankDepositFee
|
||||
feeBuilder.FiatCurrency = currency.HKD
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@@ -797,7 +803,7 @@ func TestGetFee(t *testing.T) {
|
||||
feeBuilder = setFeeBuilder()
|
||||
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
|
||||
feeBuilder.FiatCurrency = currency.HKD
|
||||
if _, err := b.GetFee(feeBuilder); err != nil {
|
||||
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@@ -818,7 +824,7 @@ func TestGetActiveOrders(t *testing.T) {
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
|
||||
_, err := b.GetActiveOrders(&getOrdersRequest)
|
||||
_, err := b.GetActiveOrders(context.Background(), &getOrdersRequest)
|
||||
if areTestAPIKeysSet() && err != nil {
|
||||
t.Errorf("Could not get open orders: %s", err)
|
||||
} else if !areTestAPIKeysSet() && err == nil {
|
||||
@@ -833,7 +839,7 @@ func TestGetOrderHistory(t *testing.T) {
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
|
||||
_, err := b.GetOrderHistory(&getOrdersRequest)
|
||||
_, err := b.GetOrderHistory(context.Background(), &getOrdersRequest)
|
||||
if areTestAPIKeysSet() && err != nil {
|
||||
t.Errorf("Could not get order history: %s", err)
|
||||
} else if !areTestAPIKeysSet() && err == nil {
|
||||
@@ -865,7 +871,7 @@ func TestSubmitOrder(t *testing.T) {
|
||||
Amount: 20,
|
||||
ClientID: "meowOrder",
|
||||
}
|
||||
response, err := b.SubmitOrder(orderSubmission)
|
||||
response, err := b.SubmitOrder(context.Background(), orderSubmission)
|
||||
|
||||
if areTestAPIKeysSet() && err != nil {
|
||||
t.Errorf("Could not place order: %v", err)
|
||||
@@ -893,7 +899,7 @@ func TestCancelExchangeOrder(t *testing.T) {
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
|
||||
err := b.CancelOrder(orderCancellation)
|
||||
err := b.CancelOrder(context.Background(), orderCancellation)
|
||||
if !areTestAPIKeysSet() && err == nil {
|
||||
t.Error("Expecting an error when no keys are set")
|
||||
}
|
||||
@@ -917,7 +923,7 @@ func TestCancelAllExchangeOrdera(t *testing.T) {
|
||||
AssetType: asset.Spot,
|
||||
}
|
||||
|
||||
resp, err := b.CancelAllOrders(orderCancellation)
|
||||
resp, err := b.CancelAllOrders(context.Background(), orderCancellation)
|
||||
|
||||
if !areTestAPIKeysSet() && err == nil {
|
||||
t.Error("Expecting an error when no keys are set")
|
||||
@@ -936,7 +942,8 @@ func TestModifyOrder(t *testing.T) {
|
||||
if areTestAPIKeysSet() && !canManipulateRealOrders {
|
||||
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
|
||||
}
|
||||
_, err := b.ModifyOrder(&order.Modify{AssetType: asset.Spot})
|
||||
_, err := b.ModifyOrder(context.Background(),
|
||||
&order.Modify{AssetType: asset.Spot})
|
||||
if err == nil {
|
||||
t.Error("ModifyOrder() Expected error")
|
||||
}
|
||||
@@ -957,7 +964,8 @@ func TestWithdraw(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := b.WithdrawCryptocurrencyFunds(&withdrawCryptoRequest)
|
||||
_, err := b.WithdrawCryptocurrencyFunds(context.Background(),
|
||||
&withdrawCryptoRequest)
|
||||
if !areTestAPIKeysSet() && err == nil {
|
||||
t.Error("Expecting an error when no keys are set")
|
||||
}
|
||||
@@ -981,7 +989,7 @@ func TestWithdrawFiat(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := b.WithdrawFiatFunds(&withdrawFiatRequest)
|
||||
_, err := b.WithdrawFiatFunds(context.Background(), &withdrawFiatRequest)
|
||||
if !areTestAPIKeysSet() && err == nil {
|
||||
t.Error("Expecting an error when no keys are set")
|
||||
}
|
||||
@@ -1013,7 +1021,8 @@ func TestWithdrawInternationalBank(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := b.WithdrawFiatFundsToInternationalBank(&withdrawFiatRequest)
|
||||
_, err := b.WithdrawFiatFundsToInternationalBank(context.Background(),
|
||||
&withdrawFiatRequest)
|
||||
if !areTestAPIKeysSet() && err == nil {
|
||||
t.Error("Expecting an error when no keys are set")
|
||||
}
|
||||
@@ -1025,12 +1034,14 @@ func TestWithdrawInternationalBank(t *testing.T) {
|
||||
func TestGetDepositAddress(t *testing.T) {
|
||||
t.Parallel()
|
||||
if areTestAPIKeysSet() {
|
||||
_, err := b.GetDepositAddress(currency.BTC, "deposit")
|
||||
_, err := b.GetDepositAddress(context.Background(),
|
||||
currency.BTC, "deposit")
|
||||
if err != nil {
|
||||
t.Error("GetDepositAddress() error", err)
|
||||
}
|
||||
} else {
|
||||
_, err := b.GetDepositAddress(currency.BTC, "deposit")
|
||||
_, err := b.GetDepositAddress(context.Background(),
|
||||
currency.BTC, "deposit")
|
||||
if err == nil {
|
||||
t.Error("GetDepositAddress() error cannot be nil")
|
||||
}
|
||||
@@ -1194,7 +1205,7 @@ func TestWsCancelOffer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConvertSymbolToDepositMethod(t *testing.T) {
|
||||
s, err := b.ConvertSymbolToDepositMethod(currency.BTC)
|
||||
s, err := b.ConvertSymbolToDepositMethod(context.Background(), currency.BTC)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -1202,14 +1213,15 @@ func TestConvertSymbolToDepositMethod(t *testing.T) {
|
||||
t.Errorf("expected bitcoin but received %s", s)
|
||||
}
|
||||
|
||||
_, err = b.ConvertSymbolToDepositMethod(currency.NewCode("CATS!"))
|
||||
_, err = b.ConvertSymbolToDepositMethod(context.Background(),
|
||||
currency.NewCode("CATS!"))
|
||||
if err == nil {
|
||||
log.Fatal("error cannot be nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateTradablePairs(t *testing.T) {
|
||||
err := b.UpdateTradablePairs(false)
|
||||
err := b.UpdateTradablePairs(context.Background(), false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -1322,12 +1334,14 @@ func TestGetHistoricCandles(t *testing.T) {
|
||||
}
|
||||
startTime := time.Now().Add(-time.Hour * 24)
|
||||
endTime := time.Now().Add(-time.Hour * 20)
|
||||
_, err = b.GetHistoricCandles(currencyPair, asset.Spot, startTime, endTime, kline.OneHour)
|
||||
_, err = b.GetHistoricCandles(context.Background(),
|
||||
currencyPair, asset.Spot, startTime, endTime, kline.OneHour)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.GetHistoricCandles(currencyPair, asset.Spot, startTime, time.Now(), kline.OneMin*1337)
|
||||
_, err = b.GetHistoricCandles(context.Background(),
|
||||
currencyPair, asset.Spot, startTime, time.Now(), kline.OneMin*1337)
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1340,12 +1354,14 @@ func TestGetHistoricCandlesExtended(t *testing.T) {
|
||||
}
|
||||
startTime := time.Now().Add(-time.Hour * 24)
|
||||
endTime := time.Now().Add(-time.Hour * 20)
|
||||
_, err = b.GetHistoricCandlesExtended(currencyPair, asset.Spot, startTime, endTime, kline.OneHour)
|
||||
_, err = b.GetHistoricCandlesExtended(context.Background(),
|
||||
currencyPair, asset.Spot, startTime, endTime, kline.OneHour)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = b.GetHistoricCandlesExtended(currencyPair, asset.Spot, startTime, endTime, kline.OneMin*1337)
|
||||
_, err = b.GetHistoricCandlesExtended(context.Background(),
|
||||
currencyPair, asset.Spot, startTime, endTime, kline.OneMin*1337)
|
||||
if err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1525,7 +1541,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)
|
||||
}
|
||||
@@ -1534,7 +1550,7 @@ func TestGetRecentTrades(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.GetRecentTrades(currencyPair, asset.Margin)
|
||||
_, err = b.GetRecentTrades(context.Background(), currencyPair, asset.Margin)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -1546,13 +1562,17 @@ func TestGetHistoricTrades(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, err = b.GetHistoricTrades(currencyPair, asset.Spot, time.Now().Add(-time.Minute*15), time.Now())
|
||||
_, err = b.GetHistoricTrades(context.Background(),
|
||||
currencyPair, asset.Spot, time.Now().Add(-time.Minute*15), time.Now())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// longer term test
|
||||
_, err = b.GetHistoricTrades(currencyPair, asset.Spot, time.Now().Add(-time.Hour*100), time.Now().Add(-time.Hour*99))
|
||||
_, err = b.GetHistoricTrades(context.Background(),
|
||||
currencyPair, asset.Spot,
|
||||
time.Now().Add(-time.Hour*100),
|
||||
time.Now().Add(-time.Hour*99))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package bitfinex
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
@@ -42,7 +43,7 @@ func (b *Bitfinex) 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
|
||||
}
|
||||
@@ -254,7 +255,7 @@ func (b *Bitfinex) 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. Err: %s",
|
||||
@@ -264,8 +265,8 @@ func (b *Bitfinex) Run() {
|
||||
}
|
||||
|
||||
// FetchTradablePairs returns a list of the exchanges tradable pairs
|
||||
func (b *Bitfinex) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
items, err := b.GetTickerBatch()
|
||||
func (b *Bitfinex) FetchTradablePairs(ctx context.Context, a asset.Item) ([]string, error) {
|
||||
items, err := b.GetTickerBatch(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -302,10 +303,10 @@ func (b *Bitfinex) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
|
||||
// UpdateTradablePairs updates the exchanges available pairs and stores
|
||||
// them in the exchanges config
|
||||
func (b *Bitfinex) UpdateTradablePairs(forceUpdate bool) error {
|
||||
func (b *Bitfinex) UpdateTradablePairs(ctx context.Context, forceUpdate bool) error {
|
||||
assets := b.CurrencyPairs.GetAssetTypes(false)
|
||||
for i := range assets {
|
||||
pairs, err := b.FetchTradablePairs(assets[i])
|
||||
pairs, err := b.FetchTradablePairs(ctx, assets[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -324,13 +325,13 @@ func (b *Bitfinex) UpdateTradablePairs(forceUpdate bool) error {
|
||||
}
|
||||
|
||||
// UpdateTickers updates the ticker for all currency pairs of a given asset type
|
||||
func (b *Bitfinex) UpdateTickers(a asset.Item) error {
|
||||
func (b *Bitfinex) UpdateTickers(ctx context.Context, a asset.Item) error {
|
||||
enabledPairs, err := b.GetEnabledPairs(a)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tickerNew, err := b.GetTickerBatch()
|
||||
tickerNew, err := b.GetTickerBatch(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -363,8 +364,8 @@ func (b *Bitfinex) UpdateTickers(a asset.Item) error {
|
||||
}
|
||||
|
||||
// UpdateTicker updates and returns the ticker for a currency pair
|
||||
func (b *Bitfinex) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
err := b.UpdateTickers(a)
|
||||
func (b *Bitfinex) UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
err := b.UpdateTickers(ctx, a)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -372,7 +373,7 @@ func (b *Bitfinex) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, e
|
||||
}
|
||||
|
||||
// FetchTicker returns the ticker for a currency pair
|
||||
func (b *Bitfinex) FetchTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
func (b *Bitfinex) FetchTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
fPair, err := b.FormatExchangeCurrency(p, a)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -381,13 +382,13 @@ func (b *Bitfinex) FetchTicker(p currency.Pair, a asset.Item) (*ticker.Price, er
|
||||
b.appendOptionalDelimiter(&fPair)
|
||||
tick, err := ticker.GetTicker(b.Name, fPair, asset.Spot)
|
||||
if err != nil {
|
||||
return b.UpdateTicker(fPair, a)
|
||||
return b.UpdateTicker(ctx, fPair, a)
|
||||
}
|
||||
return tick, nil
|
||||
}
|
||||
|
||||
// FetchOrderbook returns the orderbook for a currency pair
|
||||
func (b *Bitfinex) FetchOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *Bitfinex) FetchOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
fPair, err := b.FormatExchangeCurrency(p, assetType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -396,13 +397,13 @@ func (b *Bitfinex) FetchOrderbook(p currency.Pair, assetType asset.Item) (*order
|
||||
b.appendOptionalDelimiter(&fPair)
|
||||
ob, err := orderbook.Get(b.Name, fPair, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateOrderbook(fPair, assetType)
|
||||
return b.UpdateOrderbook(ctx, fPair, assetType)
|
||||
}
|
||||
return ob, nil
|
||||
}
|
||||
|
||||
// UpdateOrderbook updates and returns the orderbook for a currency pair
|
||||
func (b *Bitfinex) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *Bitfinex) UpdateOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
o := &orderbook.Base{
|
||||
Exchange: b.Name,
|
||||
Pair: p,
|
||||
@@ -424,7 +425,7 @@ func (b *Bitfinex) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orde
|
||||
prefix = "f"
|
||||
}
|
||||
var orderbookNew Orderbook
|
||||
orderbookNew, err = b.GetOrderbook(prefix+fPair.String(), "R0", 100)
|
||||
orderbookNew, err = b.GetOrderbook(ctx, prefix+fPair.String(), "R0", 100)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -471,11 +472,11 @@ func (b *Bitfinex) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orde
|
||||
|
||||
// UpdateAccountInfo retrieves balances for all enabled currencies on the
|
||||
// Bitfinex exchange
|
||||
func (b *Bitfinex) UpdateAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *Bitfinex) UpdateAccountInfo(ctx context.Context, assetType asset.Item) (account.Holdings, error) {
|
||||
var response account.Holdings
|
||||
response.Exchange = b.Name
|
||||
|
||||
accountBalance, err := b.GetAccountBalance()
|
||||
accountBalance, err := b.GetAccountBalance(ctx)
|
||||
if err != nil {
|
||||
return response, err
|
||||
}
|
||||
@@ -511,10 +512,10 @@ func (b *Bitfinex) UpdateAccountInfo(assetType asset.Item) (account.Holdings, er
|
||||
}
|
||||
|
||||
// FetchAccountInfo retrieves balances for all enabled currencies
|
||||
func (b *Bitfinex) FetchAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *Bitfinex) 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
|
||||
@@ -522,22 +523,22 @@ func (b *Bitfinex) FetchAccountInfo(assetType asset.Item) (account.Holdings, err
|
||||
|
||||
// GetFundingHistory returns funding history, deposits and
|
||||
// withdrawals
|
||||
func (b *Bitfinex) GetFundingHistory() ([]exchange.FundHistory, error) {
|
||||
func (b *Bitfinex) GetFundingHistory(ctx context.Context) ([]exchange.FundHistory, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// GetWithdrawalsHistory returns previous withdrawals data
|
||||
func (b *Bitfinex) GetWithdrawalsHistory(c currency.Code) (resp []exchange.WithdrawalHistory, err error) {
|
||||
func (b *Bitfinex) 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 *Bitfinex) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
return b.GetHistoricTrades(p, assetType, time.Now().Add(-time.Minute*15), time.Now())
|
||||
func (b *Bitfinex) GetRecentTrades(ctx context.Context, p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
return b.GetHistoricTrades(ctx, p, assetType, time.Now().Add(-time.Minute*15), time.Now())
|
||||
}
|
||||
|
||||
// GetHistoricTrades returns historic trade data within the timeframe provided
|
||||
func (b *Bitfinex) GetHistoricTrades(p currency.Pair, assetType asset.Item, timestampStart, timestampEnd time.Time) ([]trade.Data, error) {
|
||||
func (b *Bitfinex) GetHistoricTrades(ctx context.Context, p currency.Pair, assetType asset.Item, timestampStart, timestampEnd time.Time) ([]trade.Data, error) {
|
||||
if assetType == asset.MarginFunding {
|
||||
return nil, fmt.Errorf("asset type '%v' not supported", assetType)
|
||||
}
|
||||
@@ -560,7 +561,8 @@ func (b *Bitfinex) GetHistoricTrades(p currency.Pair, assetType asset.Item, time
|
||||
allTrades:
|
||||
for {
|
||||
var tradeData []Trade
|
||||
tradeData, err = b.GetTrades(currString, int64(limit), 0, ts.Unix()*1000, false)
|
||||
tradeData, err = b.GetTrades(ctx,
|
||||
currString, int64(limit), 0, ts.Unix()*1000, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -602,7 +604,7 @@ allTrades:
|
||||
}
|
||||
|
||||
// SubmitOrder submits a new order
|
||||
func (b *Bitfinex) SubmitOrder(o *order.Submit) (order.SubmitResponse, error) {
|
||||
func (b *Bitfinex) SubmitOrder(ctx context.Context, o *order.Submit) (order.SubmitResponse, error) {
|
||||
var submitOrderResponse order.SubmitResponse
|
||||
err := o.Validate()
|
||||
if err != nil {
|
||||
@@ -633,7 +635,8 @@ func (b *Bitfinex) SubmitOrder(o *order.Submit) (order.SubmitResponse, error) {
|
||||
if o.AssetType == asset.Spot {
|
||||
orderType = "exchange " + orderType
|
||||
}
|
||||
response, err = b.NewOrder(fpair.String(),
|
||||
response, err = b.NewOrder(ctx,
|
||||
fpair.String(),
|
||||
orderType,
|
||||
o.Amount,
|
||||
o.Price,
|
||||
@@ -656,7 +659,7 @@ func (b *Bitfinex) SubmitOrder(o *order.Submit) (order.SubmitResponse, error) {
|
||||
|
||||
// ModifyOrder will allow of changing orderbook placement and limit to
|
||||
// market conversion
|
||||
func (b *Bitfinex) ModifyOrder(action *order.Modify) (order.Modify, error) {
|
||||
func (b *Bitfinex) ModifyOrder(ctx context.Context, action *order.Modify) (order.Modify, error) {
|
||||
if err := action.Validate(); err != nil {
|
||||
return order.Modify{}, err
|
||||
}
|
||||
@@ -689,7 +692,7 @@ func (b *Bitfinex) ModifyOrder(action *order.Modify) (order.Modify, error) {
|
||||
}
|
||||
|
||||
// CancelOrder cancels an order by its corresponding ID number
|
||||
func (b *Bitfinex) CancelOrder(o *order.Cancel) error {
|
||||
func (b *Bitfinex) CancelOrder(ctx context.Context, o *order.Cancel) error {
|
||||
if err := o.Validate(o.StandardCancel()); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -701,50 +704,50 @@ func (b *Bitfinex) CancelOrder(o *order.Cancel) error {
|
||||
if b.Websocket.CanUseAuthenticatedWebsocketForWrapper() {
|
||||
err = b.WsCancelOrder(orderIDInt)
|
||||
} else {
|
||||
_, err = b.CancelExistingOrder(orderIDInt)
|
||||
_, err = b.CancelExistingOrder(ctx, orderIDInt)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// CancelBatchOrders cancels an orders by their corresponding ID numbers
|
||||
func (b *Bitfinex) CancelBatchOrders(o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
func (b *Bitfinex) CancelBatchOrders(ctx context.Context, o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
return order.CancelBatchResponse{}, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// CancelAllOrders cancels all orders associated with a currency pair
|
||||
func (b *Bitfinex) CancelAllOrders(_ *order.Cancel) (order.CancelAllResponse, error) {
|
||||
func (b *Bitfinex) CancelAllOrders(ctx context.Context, _ *order.Cancel) (order.CancelAllResponse, error) {
|
||||
var err error
|
||||
if b.Websocket.CanUseAuthenticatedWebsocketForWrapper() {
|
||||
err = b.WsCancelAllOrders()
|
||||
} else {
|
||||
_, err = b.CancelAllExistingOrders()
|
||||
_, err = b.CancelAllExistingOrders(ctx)
|
||||
}
|
||||
return order.CancelAllResponse{}, err
|
||||
}
|
||||
|
||||
// GetOrderInfo returns order information based on order ID
|
||||
func (b *Bitfinex) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
func (b *Bitfinex) GetOrderInfo(ctx context.Context, orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
var orderDetail order.Detail
|
||||
return orderDetail, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// GetDepositAddress returns a deposit address for a specified currency
|
||||
func (b *Bitfinex) GetDepositAddress(c currency.Code, accountID string) (string, error) {
|
||||
func (b *Bitfinex) GetDepositAddress(ctx context.Context, c currency.Code, accountID string) (string, error) {
|
||||
if accountID == "" {
|
||||
accountID = "deposit"
|
||||
}
|
||||
|
||||
method, err := b.ConvertSymbolToDepositMethod(c)
|
||||
method, err := b.ConvertSymbolToDepositMethod(ctx, c)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
resp, err := b.NewDeposit(method, accountID, 0)
|
||||
resp, err := b.NewDeposit(ctx, method, accountID, 0)
|
||||
return resp.Address, err
|
||||
}
|
||||
|
||||
// WithdrawCryptocurrencyFunds returns a withdrawal ID when a withdrawal is submitted
|
||||
func (b *Bitfinex) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Bitfinex) WithdrawCryptocurrencyFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
if err := withdrawRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -752,7 +755,8 @@ func (b *Bitfinex) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request
|
||||
// As this is for trading, I've made the wrapper default 'exchange'
|
||||
// TODO: Discover an automated way to make the decision for wallet type to withdraw from
|
||||
walletType := "exchange"
|
||||
resp, err := b.WithdrawCryptocurrency(walletType,
|
||||
resp, err := b.WithdrawCryptocurrency(ctx,
|
||||
walletType,
|
||||
withdrawRequest.Crypto.Address,
|
||||
withdrawRequest.Description,
|
||||
withdrawRequest.Amount,
|
||||
@@ -769,7 +773,7 @@ func (b *Bitfinex) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request
|
||||
|
||||
// WithdrawFiatFunds returns a withdrawal ID when a withdrawal is submitted
|
||||
// Returns comma delimited withdrawal IDs
|
||||
func (b *Bitfinex) WithdrawFiatFunds(withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Bitfinex) WithdrawFiatFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
if err := withdrawRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -778,7 +782,7 @@ func (b *Bitfinex) WithdrawFiatFunds(withdrawRequest *withdraw.Request) (*withdr
|
||||
// As this is for trading, I've made the wrapper default 'exchange'
|
||||
// TODO: Discover an automated way to make the decision for wallet type to withdraw from
|
||||
walletType := "exchange"
|
||||
resp, err := b.WithdrawFIAT(withdrawalType, walletType, withdrawRequest)
|
||||
resp, err := b.WithdrawFIAT(ctx, withdrawalType, walletType, withdrawRequest)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -791,11 +795,11 @@ func (b *Bitfinex) WithdrawFiatFunds(withdrawRequest *withdraw.Request) (*withdr
|
||||
|
||||
// WithdrawFiatFundsToInternationalBank returns a withdrawal ID when a withdrawal is submitted
|
||||
// Returns comma delimited withdrawal IDs
|
||||
func (b *Bitfinex) WithdrawFiatFundsToInternationalBank(withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Bitfinex) WithdrawFiatFundsToInternationalBank(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
if err := withdrawRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
v, err := b.WithdrawFiatFunds(withdrawRequest)
|
||||
v, err := b.WithdrawFiatFunds(ctx, withdrawRequest)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -806,22 +810,22 @@ func (b *Bitfinex) WithdrawFiatFundsToInternationalBank(withdrawRequest *withdra
|
||||
}
|
||||
|
||||
// GetFeeByType returns an estimate of fee based on type of transaction
|
||||
func (b *Bitfinex) GetFeeByType(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
func (b *Bitfinex) 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)
|
||||
}
|
||||
|
||||
// GetActiveOrders retrieves any orders that are active/open
|
||||
func (b *Bitfinex) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *Bitfinex) GetActiveOrders(ctx context.Context, req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var orders []order.Detail
|
||||
resp, err := b.GetOpenOrders()
|
||||
resp, err := b.GetOpenOrders(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -884,13 +888,13 @@ func (b *Bitfinex) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
|
||||
// GetOrderHistory retrieves account order information
|
||||
// Can Limit response to specific order status
|
||||
func (b *Bitfinex) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *Bitfinex) GetOrderHistory(ctx context.Context, req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var orders []order.Detail
|
||||
resp, err := b.GetInactiveOrders()
|
||||
resp, err := b.GetInactiveOrders(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -954,7 +958,7 @@ func (b *Bitfinex) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
}
|
||||
|
||||
// AuthenticateWebsocket sends an authentication message to the websocket
|
||||
func (b *Bitfinex) AuthenticateWebsocket() error {
|
||||
func (b *Bitfinex) AuthenticateWebsocket(_ context.Context) error {
|
||||
return b.WsSendAuth()
|
||||
}
|
||||
|
||||
@@ -968,8 +972,8 @@ func (b *Bitfinex) appendOptionalDelimiter(p *currency.Pair) {
|
||||
|
||||
// ValidateCredentials validates current credentials used for wrapper
|
||||
// functionality
|
||||
func (b *Bitfinex) ValidateCredentials(assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(assetType)
|
||||
func (b *Bitfinex) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(ctx, assetType)
|
||||
return b.CheckTransientError(err)
|
||||
}
|
||||
|
||||
@@ -988,7 +992,7 @@ func (b *Bitfinex) FormatExchangeKlineInterval(in kline.Interval) string {
|
||||
}
|
||||
|
||||
// GetHistoricCandles returns candles between a time period for a set time interval
|
||||
func (b *Bitfinex) GetHistoricCandles(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *Bitfinex) 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
|
||||
}
|
||||
@@ -1002,7 +1006,8 @@ func (b *Bitfinex) GetHistoricCandles(pair currency.Pair, a asset.Item, start, e
|
||||
return kline.Item{}, err
|
||||
}
|
||||
|
||||
candles, err := b.GetCandles(cf, b.FormatExchangeKlineInterval(interval),
|
||||
candles, err := b.GetCandles(ctx,
|
||||
cf, b.FormatExchangeKlineInterval(interval),
|
||||
start.Unix()*1000, end.Unix()*1000,
|
||||
b.Features.Enabled.Kline.ResultLimit, true)
|
||||
if err != nil {
|
||||
@@ -1031,7 +1036,7 @@ func (b *Bitfinex) GetHistoricCandles(pair currency.Pair, a asset.Item, start, e
|
||||
}
|
||||
|
||||
// GetHistoricCandlesExtended returns candles between a time period for a set time interval
|
||||
func (b *Bitfinex) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *Bitfinex) 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
|
||||
}
|
||||
@@ -1054,7 +1059,8 @@ func (b *Bitfinex) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item,
|
||||
|
||||
for x := range dates.Ranges {
|
||||
var candles []Candle
|
||||
candles, err = b.GetCandles(cf, b.FormatExchangeKlineInterval(interval),
|
||||
candles, err = b.GetCandles(ctx,
|
||||
cf, b.FormatExchangeKlineInterval(interval),
|
||||
dates.Ranges[x].Start.Ticks*1000, dates.Ranges[x].End.Ticks*1000,
|
||||
b.Features.Enabled.Kline.ResultLimit, true)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user