Skip to content

Commit

Permalink
added user universal transfer method to Binance Spot (#313)
Browse files Browse the repository at this point in the history
  • Loading branch information
amaioli committed Oct 7, 2021
1 parent 1c85553 commit e13d55c
Show file tree
Hide file tree
Showing 3 changed files with 260 additions and 0 deletions.
5 changes: 5 additions & 0 deletions v2/client.go
Expand Up @@ -657,3 +657,8 @@ func (c *Client) NewDustTransferService() *DustTransferService {
func (c *Client) NewAssetDividendService() *AssetDividendService {
return &AssetDividendService{c: c}
}

// NewUserUniversalTransferService
func (c *Client) NewUserUniversalTransferService() *CreateUserUniversalTransferService {
return &CreateUserUniversalTransferService{c: c}
}
201 changes: 201 additions & 0 deletions v2/user_universal_transfer.go
@@ -0,0 +1,201 @@
/*******************************************************************************
** @Author: Alessandro Maioli <Nicemine>
** @Email: alessandro.maioli@gmail.com
** @Date: Wednesday 29 September 2021 - 18:51:45
** @Filename: user_universal_transfer.go
**
** @Last modified by:
*******************************************************************************/

package binance

import (
"context"
"encoding/json"
)

// CreateUserUniversalTransferService submits a transfer request.
//
// See https://binance-docs.github.io/apidocs/spot/en/#user-universal-transfer-user_data
type CreateUserUniversalTransferService struct {
c *Client
types string
asset string
amount float64
fromSymbol *string
toSymbol *string
}

// Coin sets the coin parameter (MANDATORY).
func (s *CreateUserUniversalTransferService) Type(v string) *CreateUserUniversalTransferService {
s.types = v
return s
}

// Asset sets the Asset parameter (MANDATORY).
func (s *CreateUserUniversalTransferService) Asset(v string) *CreateUserUniversalTransferService {
s.asset = v
return s
}

// Amount sets the Amount parameter (MANDATORY).
func (s *CreateUserUniversalTransferService) Amount(v float64) *CreateUserUniversalTransferService {
s.amount = v
return s
}

// fromSymbol sets the fromSymbol parameter
func (s *CreateUserUniversalTransferService) FromSymbol(v string) *CreateUserUniversalTransferService {
s.fromSymbol = &v
return s
}

// toSymbol sets the toSymbol parameter
func (s *CreateUserUniversalTransferService) ToSymbol(v string) *CreateUserUniversalTransferService {
s.toSymbol = &v
return s
}

// Do sends the request.
func (s *CreateUserUniversalTransferService) Do(ctx context.Context) (*CreateUserUniversalTransferResponse, error) {
r := &request{
method: "POST",
endpoint: "/sapi/v1/asset/transfer",
secType: secTypeSigned,
}
r.setParam("types", s.types)
r.setParam("asset", s.asset)
r.setParam("amount", s.amount)
if v := s.fromSymbol; v != nil {
r.setParam("fromSymbol", *v)
}
if v := s.toSymbol; v != nil {
r.setParam("toSymbol", *v)
}

data, err := s.c.callAPI(ctx, r)
if err != nil {
return nil, err
}

res := &CreateUserUniversalTransferResponse{}
if err := json.Unmarshal(data, res); err != nil {
return nil, err
}

return res, nil
}

// CreateUserUniversalTransferResponse represents a response from CreateUserUniversalTransferResponse.
type CreateUserUniversalTransferResponse struct {
ID int64 `json:"tranId"`
}

// ListUserUniversalTransfer fetches transfer history.
//
// See https://binance-docs.github.io/apidocs/spot/en/#query-user-universal-transfer-history-user_data
// type ListUserUniversalTransfer struct {
// c *Client
// types string
// startTime *int64
// endTime *int64
// current *int
// size *int
// fromSymbol *string
// toSymbol *string
// }

// // Type sets the type parameter.
// func (s *ListUserUniversalTransfer) Type(v string) *ListUserUniversalTransfer {
// s.types = v
// return s
// }

// // StartTime sets the startTime parameter.
// func (s *ListUserUniversalTransfer) StartTime(v int64) *ListUserUniversalTransfer {
// s.startTime = &v
// return s
// }

// // EndTime sets the startTime parameter.
// func (s *ListUserUniversalTransfer) EndTime(v int64) *ListUserUniversalTransfer {
// s.startTime = &v
// return s
// }

// // Current sets the current parameter.
// func (s *ListUserUniversalTransfer) Current(v int) *ListUserUniversalTransfer {
// s.current = &v
// return s
// }

// // Size sets the size parameter.
// func (s *ListUserUniversalTransfer) Size(v int) *ListUserUniversalTransfer {
// s.current = &v
// return s
// }

// // FromSymbol set fromSymbol
// func (s *ListUserUniversalTransfer) FromSymbol(v string) *ListUserUniversalTransfer {
// s.fromSymbol = &v
// return s
// }

// // ToSymbol set toSymbol
// func (s *ListUserUniversalTransfer) ToSymbol(v string) *ListUserUniversalTransfer {
// s.toSymbol = &v
// return s
// }

// // Do sends the request.
// func (s *ListUserUniversalTransfer) Do(ctx context.Context) (res []*TransferResult, err error) {
// r := &request{
// method: "GET",
// endpoint: "/sapi/v1/asset/transfer",
// secType: secTypeSigned,
// }
// r.setParam("types", s.types)
// if s.startTime != nil {
// r.setParam("startTime", *s.startTime)
// }
// if s.endTime != nil {
// r.setParam("endTime", *s.endTime)
// }
// if s.current != nil {
// r.setParam("current", *s.current)
// }
// if s.size != nil {
// r.setParam("size", *s.size)
// }
// if s.fromSymbol != nil {
// r.setParam("fromSymbol", *s.fromSymbol)
// }
// if s.toSymbol != nil {
// r.setParam("toSymbol", *s.toSymbol)
// }
// data, err := s.c.callAPI(ctx, r)
// if err != nil {
// return
// }
// res = make([]*TransferResult, 0)
// err = json.Unmarshal(data, &res)
// if err != nil {
// return
// }
// return res, nil
// }

// // Withdraw represents a single withdraw entry.
// type TransferResult struct {
// Total uint8 `json:"total"`
// Transfer []Transfer `json:"rows"`
// }

// type Transfer struct {
// Asset string `json:"asset"`
// Amount string `json:"amount"`
// Type string `json:"type"`
// Status string `json:"status"`
// TranId string `json:"tranId"`
// Timestamp string `json:"timestamp"`
// }
54 changes: 54 additions & 0 deletions v2/user_universal_transfer_test.go
@@ -0,0 +1,54 @@
package binance

import (
"testing"

"github.com/stretchr/testify/suite"
)

type userUniversalTransferTestSuite struct {
baseTestSuite
}

func TestUserUniversalTransferService(t *testing.T) {
suite.Run(t, new(userUniversalTransferTestSuite))
}

func (s *userUniversalTransferTestSuite) TestUserUniversalTransfer() {
data := []byte(`
{
"tranId":13526853623
}
`)
s.mockDo(data, nil)
defer s.assertDo()

types := "MAIN_C2C"
asset := "USDT"
amount := 0.1
fromSymbol := "USDT"
toSymbol := "USDT"

s.assertReq(func(r *request) {
e := newSignedRequest().setParams(params{
"types": types,
"asset": asset,
"amount": amount,
"fromSymbol": fromSymbol,
"toSymbol": toSymbol,
})
s.assertRequestEqual(e, r)
})

res, err := s.client.NewUserUniversalTransferService().
Type(types).
Asset(asset).
Amount(amount).
FromSymbol(fromSymbol).
ToSymbol(toSymbol).
Do(newContext())

r := s.r()
r.NoError(err)
r.Equal(int64(13526853623), res.ID)
}

0 comments on commit e13d55c

Please sign in to comment.