Skip to content

Commit

Permalink
Add new API setSubUserTradbleMarket and setSubUserTransferability
Browse files Browse the repository at this point in the history
  • Loading branch information
eynzhang committed Sep 7, 2020
1 parent 75de5c6 commit f02c069
Show file tree
Hide file tree
Showing 9 changed files with 228 additions and 77 deletions.
53 changes: 0 additions & 53 deletions cmd/accountclientexample/accountclientexample.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"github.com/huobirdcenter/huobi_golang/logging/applogger"
"github.com/huobirdcenter/huobi_golang/pkg/client"
"github.com/huobirdcenter/huobi_golang/pkg/model/account"
"github.com/huobirdcenter/huobi_golang/pkg/model/subuser"
"github.com/shopspring/decimal"
)

Expand All @@ -17,9 +16,6 @@ func RunAllExamples() {
getAccountLedger()
transferFromFutureToSpot()
transferFromSpotToFuture()
subUserTransfer()
getSubUserAggregateBalance()
getSubUserAccount()
}

func getAccountInfo() {
Expand Down Expand Up @@ -99,24 +95,6 @@ func getAccountLedger() {
}
}

func getSubUserAccount() {
client := new(client.AccountClient).Init(config.AccessKey, config.SecretKey, config.Host)
resp, err := client.GetSubUserAccount(config.SubUid)
if err != nil {
applogger.Error("Get sub user account error: %s", err)
} else {
applogger.Info("Get sub user account, count=%d", len(resp))
for _, account := range resp {
applogger.Info("account id: %d, type: %s, currency count=%d", account.Id, account.Type, len(account.List))
if account.List != nil {
for _, currency := range account.List {
applogger.Info("currency: %+v", currency)
}
}
}
}
}

func transferFromFutureToSpot() {
client := new(client.AccountClient).Init(config.AccessKey, config.SecretKey, config.Host)
futuresTransferRequest := account.FuturesTransferRequest{Currency: "btc", Amount: decimal.NewFromFloat(0.001), Type: "futures-to-pro"}
Expand All @@ -138,34 +116,3 @@ func transferFromSpotToFuture() {
applogger.Info("Transfer from spot to future success: id=%d", resp)
}
}

func getSubUserAggregateBalance() {
client := new(client.AccountClient).Init(config.AccessKey, config.SecretKey, config.Host)
resp, err := client.GetSubUserAggregateBalance()
if err != nil {
applogger.Error("Get sub user aggregated balance error: %s", err)
} else {
applogger.Info("Get sub user aggregated balance, count=%d", len(resp))
for _, result := range resp {
applogger.Info("balance: %+v", result)
}
}
}

func subUserTransfer() {
client := new(client.AccountClient).Init(config.AccessKey, config.SecretKey, config.Host)
currency := "usdt"
subUserTransferRequest := subuser.SubUserTransferRequest{
SubUid: config.SubUid,
Currency: currency,
Amount: decimal.NewFromInt(1),
Type: "master-transfer-in",
}
resp, err := client.SubUserTransfer(subUserTransferRequest)
if err != nil {
applogger.Error("Transfer error: %s", err)
} else {
applogger.Info("Transfer successfully, id=%s", resp)

}
}
110 changes: 110 additions & 0 deletions cmd/subuserclientexample/subuserclientexample.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,20 @@ import (
"github.com/huobirdcenter/huobi_golang/logging/applogger"
"github.com/huobirdcenter/huobi_golang/pkg/client"
"github.com/huobirdcenter/huobi_golang/pkg/model/subuser"
"github.com/shopspring/decimal"
)

func RunAllExamples() {
createSubUser()
lockSubUser()
unlockSubUser()
setSubUserTradbleMarket()
setSubUserTransferability()
subUserTransfer()
getSubUserDepositAddress()
querySubUserDepositHistory()
getSubUserAggregateBalance()
getSubUserAccount()
}


Expand Down Expand Up @@ -58,6 +64,79 @@ func unlockSubUser() {
}
}

func setSubUserTradbleMarket() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
request := subuser.SetSubUserTradableMarketRequest{
SubUids: config.SubUid,
AccountType: "isolated-margin",
Activation: "deactivated",
}
resp, err := client.SetSubUserTradableMarket(request)
if err != nil {
applogger.Error("Deactivate sub user error: %s", err)
} else {
applogger.Info("Deactivate sub user success: %+v", resp)
}

request = subuser.SetSubUserTradableMarketRequest{
SubUids: config.SubUid,
AccountType: "isolated-margin",
Activation: "activated",
}
resp, err = client.SetSubUserTradableMarket(request)
if err != nil {
applogger.Error("Activate sub user error: %s", err)
} else {
applogger.Info("Activate sub user: %+v", resp)
}
}


func setSubUserTransferability() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
request := subuser.SetSubUserTransferabilityRequest{
SubUids: config.SubUid,
AccountType: "spot",
Transferrable: false,
}
resp, err := client.SetSubUserTransferability(request)
if err != nil {
applogger.Error("Deactivate sub user error: %s", err)
} else {
applogger.Info("Deactivate sub user success: %+v", resp)
}

request = subuser.SetSubUserTransferabilityRequest{
SubUids: config.SubUid,
AccountType: "spot",
Transferrable: true,
}
resp, err = client.SetSubUserTransferability(request)
if err != nil {
applogger.Error("Activate sub user error: %s", err)
} else {
applogger.Info("Activate sub user: %+v", resp)
}
}

func subUserTransfer() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
currency := "usdt"
subUserTransferRequest := subuser.SubUserTransferRequest{
SubUid: config.SubUid,
Currency: currency,
Amount: decimal.NewFromInt(1),
Type: "master-transfer-in",
}
resp, err := client.SubUserTransfer(subUserTransferRequest)
if err != nil {
applogger.Error("Transfer error: %s", err)
} else {
applogger.Info("Transfer successfully, id=%s", resp)

}
}

func getSubUserDepositAddress() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
currency := "usdt"
Expand Down Expand Up @@ -85,3 +164,34 @@ func querySubUserDepositHistory() {
}
}
}

func getSubUserAggregateBalance() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
resp, err := client.GetSubUserAggregateBalance()
if err != nil {
applogger.Error("Get sub user aggregated balance error: %s", err)
} else {
applogger.Info("Get sub user aggregated balance, count=%d", len(resp))
for _, result := range resp {
applogger.Info("balance: %+v", result)
}
}
}

func getSubUserAccount() {
client := new(client.SubUserClient).Init(config.AccessKey, config.SecretKey, config.Host)
resp, err := client.GetSubUserAccount(config.SubUid)
if err != nil {
applogger.Error("Get sub user account error: %s", err)
} else {
applogger.Info("Get sub user account, count=%d", len(resp))
for _, account := range resp {
applogger.Info("account id: %d, type: %s, currency count=%d", account.Id, account.Type, len(account.List))
if account.List != nil {
for _, currency := range account.List {
applogger.Info("currency: %+v", currency)
}
}
}
}
}
2 changes: 1 addition & 1 deletion config/config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package config

var Host = "api.huobi.pro"
var AccessKey = "05008dec-6056d77a-frbghq7rnm-4dc0d"
var AccessKey = "xxxx"
var AccountId = "xxxx"
var SubUid int64 = 1234567890
22 changes: 1 addition & 21 deletions pkg/client/accountclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package client
import (
"encoding/json"
"errors"
"fmt"
"github.com/huobirdcenter/huobi_golang/internal"
"github.com/huobirdcenter/huobi_golang/internal/requestbuilder"
"github.com/huobirdcenter/huobi_golang/pkg/model"
Expand Down Expand Up @@ -67,7 +66,7 @@ func (p *AccountClient) TransferAccount(request account.TransferAccountRequest)
return nil, jsonErr
}

url := p.privateUrlBuilder.Build("POST", "/v1/subuser/transfer", nil)
url := p.privateUrlBuilder.Build("POST", "/v1/account/transfer", nil)
postResp, postErr := internal.HttpPost(url, postBody)
if postErr != nil {
return nil, postErr
Expand Down Expand Up @@ -193,22 +192,3 @@ func (p *AccountClient) FuturesTransfer(request account.FuturesTransferRequest)
}
return result.Data, nil
}

// Returns the balance of a sub-account specified by sub-uid
func (p *AccountClient) GetSubUserAccount(subUid int64) ([]account.SubUserAccount, error) {
url := p.privateUrlBuilder.Build("GET", fmt.Sprintf("/v1/account/accounts/%d", subUid), nil)
getResp, getErr := internal.HttpGet(url)
if getErr != nil {
return nil, getErr
}
result := account.GetSubUserAccountResponse{}
jsonErr := json.Unmarshal([]byte(getResp), &result)
if jsonErr != nil {
return nil, jsonErr
}
if result.Status == "ok" && result.Data != nil {
return result.Data, nil
}

return nil, errors.New(getResp)
}
74 changes: 72 additions & 2 deletions pkg/client/subuserclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package client
import (
"encoding/json"
"errors"
"fmt"
"github.com/huobirdcenter/huobi_golang/internal"
"github.com/huobirdcenter/huobi_golang/internal/requestbuilder"
"github.com/huobirdcenter/huobi_golang/pkg/model"
Expand Down Expand Up @@ -65,13 +66,63 @@ func (p *SubUserClient) SubUserManagement(request subuser.SubUserManagementReque
}
if result.Code != 200 {
return nil, errors.New(postResp)
}
return result.Data, nil
}


// Set Tradable Market for Sub Users
func (p *SubUserClient) SetSubUserTradableMarket(request subuser.SetSubUserTradableMarketRequest) ([]subuser.TradableMarket, error) {
postBody, jsonErr := model.ToJson(request)
if jsonErr != nil {
return nil, jsonErr
}

url := p.privateUrlBuilder.Build("POST", "/v2/sub-user/tradable-market", nil)
postResp, postErr := internal.HttpPost(url, postBody)
if postErr != nil {
return nil, postErr
}

result := subuser.SetSubUserTradableMarketResponse{}
jsonErr = json.Unmarshal([]byte(postResp), &result)
if jsonErr != nil {
return nil, jsonErr
}
if result.Code != 200 {
return nil, errors.New(postResp)
}

return result.Data, nil
}

// Set Asset Transfer Permission for Sub Users
func (p *SubUserClient) SetSubUserTransferability(request subuser.SetSubUserTransferabilityRequest) ([]subuser.Transferability, error) {
postBody, jsonErr := model.ToJson(request)
if jsonErr != nil {
return nil, jsonErr
}

url := p.privateUrlBuilder.Build("POST", "/v2/sub-user/transferability", nil)
postResp, postErr := internal.HttpPost(url, postBody)
if postErr != nil {
return nil, postErr
}

result := subuser.SetSubUserTransferabilityResponse{}
jsonErr = json.Unmarshal([]byte(postResp), &result)
if jsonErr != nil {
return nil, jsonErr
}
if result.Code != 200 {
return nil, errors.New(postResp)
}

return result.Data, nil
}

// Transfer asset between parent and sub account
func (p *AccountClient) SubUserTransfer(request subuser.SubUserTransferRequest) (string, error) {
func (p *SubUserClient) SubUserTransfer(request subuser.SubUserTransferRequest) (string, error) {
postBody, jsonErr := model.ToJson(request)
if jsonErr != nil {
return "", jsonErr
Expand Down Expand Up @@ -155,7 +206,7 @@ func (p *SubUserClient) QuerySubUserDepositHistory(subUid int64, optionalRequest
}

// Returns the aggregated balance from all the sub-users
func (p *AccountClient) GetSubUserAggregateBalance() ([]account.Balance, error) {
func (p *SubUserClient) GetSubUserAggregateBalance() ([]account.Balance, error) {
url := p.privateUrlBuilder.Build("GET", "/v1/subuser/aggregate-balance", nil)
getResp, getErr := internal.HttpGet(url)
if getErr != nil {
Expand All @@ -173,3 +224,22 @@ func (p *AccountClient) GetSubUserAggregateBalance() ([]account.Balance, error)

return nil, errors.New(getResp)
}

// Returns the balance of a sub-account specified by sub-uid
func (p *SubUserClient) GetSubUserAccount(subUid int64) ([]account.SubUserAccount, error) {
url := p.privateUrlBuilder.Build("GET", fmt.Sprintf("/v1/account/accounts/%d", subUid), nil)
getResp, getErr := internal.HttpGet(url)
if getErr != nil {
return nil, getErr
}
result := account.GetSubUserAccountResponse{}
jsonErr := json.Unmarshal([]byte(getResp), &result)
if jsonErr != nil {
return nil, jsonErr
}
if result.Status == "ok" && result.Data != nil {
return result.Data, nil
}

return nil, errors.New(getResp)
}
15 changes: 15 additions & 0 deletions pkg/model/subuser/setsubusertradablemarketresponse.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package subuser

type SetSubUserTradableMarketResponse struct {
Code int `json:"code"`
Message string `json:"message"`
Data []TradableMarket `json:"data"`
}

type TradableMarket struct {
SubUid string `json:"subUid"`
AccountType string `json:"accountType"`
Activation string `json:"activation"`
ErrCode int `json:"errCode"`
ErrMessage string `json:"errMessage"`
}
7 changes: 7 additions & 0 deletions pkg/model/subuser/setsubusertradeblemarketrequest.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package subuser

type SetSubUserTradableMarketRequest struct {
SubUids int64 `json:"subUids"`
AccountType string `json:"accountType"`
Activation string `json:"activation"`
}
Loading

0 comments on commit f02c069

Please sign in to comment.