mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-05 15:10:59 +00:00
gateio: add ConvertSmallBalances, GetAccountDetails and GetUserTransactionRateLimitInfo API endpoints (#1889)
* gateio: add function ConvertSmallBalances * glorious/Thrasher: nits/additions * file standard * glorious: nit * AI: nit * boss king: nit * refactor: rename account detail functions and types for consistency --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
This commit is contained in:
@@ -1345,6 +1345,28 @@ func (g *Gateio) GetUsersTotalBalance(ctx context.Context, ccy currency.Code) (*
|
|||||||
return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletTotalBalanceEPL, http.MethodGet, walletTotalBalance, params, nil, &response)
|
return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletTotalBalanceEPL, http.MethodGet, walletTotalBalance, params, nil, &response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConvertSmallBalances converts small balances of provided currencies into GT.
|
||||||
|
// If no currencies are provided, all supported currencies will be converted
|
||||||
|
// See [this documentation](https://www.gate.io/help/guide/functional_guidelines/22367) for details and restrictions.
|
||||||
|
func (g *Gateio) ConvertSmallBalances(ctx context.Context, currs ...currency.Code) error {
|
||||||
|
currencyList := make([]string, len(currs))
|
||||||
|
for i := range currs {
|
||||||
|
if currs[i].IsEmpty() {
|
||||||
|
return currency.ErrCurrencyCodeEmpty
|
||||||
|
}
|
||||||
|
currencyList[i] = currs[i].Upper().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
payload := struct {
|
||||||
|
Currency []string `json:"currency"`
|
||||||
|
IsAll bool `json:"is_all"`
|
||||||
|
}{
|
||||||
|
Currency: currencyList,
|
||||||
|
IsAll: len(currs) == 0,
|
||||||
|
}
|
||||||
|
return g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletConvertSmallBalancesEPL, http.MethodPost, "wallet/small_balance", nil, payload, nil)
|
||||||
|
}
|
||||||
|
|
||||||
// ********************************* Margin *******************************************
|
// ********************************* Margin *******************************************
|
||||||
|
|
||||||
// GetMarginSupportedCurrencyPairs retrieves margin supported currency pairs.
|
// GetMarginSupportedCurrencyPairs retrieves margin supported currency pairs.
|
||||||
@@ -3686,3 +3708,15 @@ func getSettlementFromCurrency(currencyPair currency.Pair) (settlement currency.
|
|||||||
return currency.EMPTYCODE, fmt.Errorf("%w %v", errCannotParseSettlementCurrency, currencyPair)
|
return currency.EMPTYCODE, fmt.Errorf("%w %v", errCannotParseSettlementCurrency, currencyPair)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAccountDetails retrieves account details
|
||||||
|
func (g *Gateio) GetAccountDetails(ctx context.Context) (*AccountDetails, error) {
|
||||||
|
var resp *AccountDetails
|
||||||
|
return resp, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, spotAccountsEPL, http.MethodGet, "account/detail", nil, nil, &resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserTransactionRateLimitInfo retrieves user transaction rate limit info
|
||||||
|
func (g *Gateio) GetUserTransactionRateLimitInfo(ctx context.Context) ([]UserTransactionRateLimitInfo, error) {
|
||||||
|
var resp []UserTransactionRateLimitInfo
|
||||||
|
return resp, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, spotAccountsEPL, http.MethodGet, "account/rate_limit", nil, nil, &resp)
|
||||||
|
}
|
||||||
|
|||||||
@@ -3887,3 +3887,30 @@ func TestDeriveFuturesWebsocketOrderResponses(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConvertSmallBalances(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
err := g.ConvertSmallBalances(t.Context(), currency.EMPTYCODE)
|
||||||
|
require.ErrorIs(t, err, currency.ErrCurrencyCodeEmpty)
|
||||||
|
|
||||||
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders)
|
||||||
|
|
||||||
|
err = g.ConvertSmallBalances(t.Context(), currency.F16)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetAccountDetails(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, g)
|
||||||
|
got, err := g.GetAccountDetails(t.Context())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetUserTransactionRateLimitInfo(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
sharedtestvalues.SkipTestIfCredentialsUnset(t, g)
|
||||||
|
got, err := g.GetUserTransactionRateLimitInfo(t.Context())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, got)
|
||||||
|
}
|
||||||
|
|||||||
@@ -2690,3 +2690,25 @@ type UnifiedUserAccount struct {
|
|||||||
UseFunding bool `json:"use_funding"`
|
UseFunding bool `json:"use_funding"`
|
||||||
RefreshTime types.Time `json:"refresh_time"`
|
RefreshTime types.Time `json:"refresh_time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AccountDetails represents account detail information
|
||||||
|
type AccountDetails struct {
|
||||||
|
IPWhitelist []string `json:"ip_whitelist"`
|
||||||
|
CurrencyPairs []string `json:"currency_pairs"`
|
||||||
|
UserID int64 `json:"user_id"`
|
||||||
|
VIPTier int64 `json:"tier"`
|
||||||
|
VIPTierExpireTime time.Time `json:"tier_expire_time"`
|
||||||
|
Key struct {
|
||||||
|
Mode int64 `json:"mode"` // mode: 1 - classic account 2 - portfolio margin account
|
||||||
|
} `json:"key"`
|
||||||
|
CopyTradingRole int64 `json:"copy_trading_role"` // User role: 0 - Ordinary user 1 - Order leader 2 - Follower 3 - Order leader and follower
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserTransactionRateLimitInfo represents user transaction rate limit information
|
||||||
|
type UserTransactionRateLimitInfo struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
Tier types.Number `json:"tier"`
|
||||||
|
Ratio types.Number `json:"ratio"`
|
||||||
|
MainRatio types.Number `json:"main_ratio"`
|
||||||
|
UpdatedAt types.Time `json:"updated_at"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ const (
|
|||||||
walletSavedAddressesEPL
|
walletSavedAddressesEPL
|
||||||
walletTradingFeeEPL
|
walletTradingFeeEPL
|
||||||
walletTotalBalanceEPL
|
walletTotalBalanceEPL
|
||||||
|
walletConvertSmallBalancesEPL
|
||||||
walletWithdrawEPL
|
walletWithdrawEPL
|
||||||
walletCancelWithdrawEPL
|
walletCancelWithdrawEPL
|
||||||
|
|
||||||
@@ -256,6 +257,7 @@ var packageRateLimits = request.RateLimitDefinitions{
|
|||||||
walletSavedAddressesEPL: standardRateLimit(),
|
walletSavedAddressesEPL: standardRateLimit(),
|
||||||
walletTradingFeeEPL: standardRateLimit(),
|
walletTradingFeeEPL: standardRateLimit(),
|
||||||
walletTotalBalanceEPL: personalAccountRateLimit(),
|
walletTotalBalanceEPL: personalAccountRateLimit(),
|
||||||
|
walletConvertSmallBalancesEPL: personalAccountRateLimit(),
|
||||||
walletWithdrawEPL: withdrawFromWalletRateLimit(),
|
walletWithdrawEPL: withdrawFromWalletRateLimit(),
|
||||||
walletCancelWithdrawEPL: standardRateLimit(),
|
walletCancelWithdrawEPL: standardRateLimit(),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user