Skip to content

Commit 83aba8f

Browse files
committed
feat: add list user universal transfer service and update user universal transfer
1 parent 0df4381 commit 83aba8f

File tree

3 files changed

+219
-104
lines changed

3 files changed

+219
-104
lines changed

v2/client.go

+49
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ type AccountType string
105105
// SubAccountTransferType define the sub account transfer types
106106
type SubAccountTransferType int
107107

108+
// UserUniversalTransferType define the user universal transfer types
109+
type UserUniversalTransferType string
110+
111+
// UserUniversalTransferStatus define the user universal transfer status
112+
type UserUniversalTransferStatusType string
113+
108114
// Endpoints
109115
var (
110116
BaseAPIMainURL = "https://api.binance.com"
@@ -245,6 +251,44 @@ const (
245251

246252
SubAccountTransferTypeTransferIn SubAccountTransferType = 1
247253
SubAccountTransferTypeTransferOut SubAccountTransferType = 2
254+
255+
UserUniversalTransferTypeMainToUmFutures UserUniversalTransferType = "MAIN_UMFUTURE"
256+
UserUniversalTransferTypeMainToCmFutures UserUniversalTransferType = "MAIN_CMFUTURE"
257+
UserUniversalTransferTypeMainToMargin UserUniversalTransferType = "MAIN_MARGIN"
258+
UserUniversalTransferTypeUmFuturesToMain UserUniversalTransferType = "UMFUTURE_MAIN"
259+
UserUniversalTransferTypeUmFuturesToMargin UserUniversalTransferType = "UMFUTURE_MARGIN"
260+
UserUniversalTransferTypeCmFuturesToMain UserUniversalTransferType = "CMFUTURE_MAIN"
261+
UserUniversalTransferTypeMarginToMain UserUniversalTransferType = "MARGIN_MAIN"
262+
UserUniversalTransferTypeMarginToUmFutures UserUniversalTransferType = "MARGIN_UMFUTURE"
263+
UserUniversalTransferTypeMarginToCmFutures UserUniversalTransferType = "MARGIN_CMFUTURE"
264+
UserUniversalTransferTypeCmFuturesToMargin UserUniversalTransferType = "CMFUTURE_MARGIN"
265+
UserUniversalTransferTypeIsolatedMarginToMargin UserUniversalTransferType = "ISOLATEDMARGIN_MARGIN"
266+
UserUniversalTransferTypeMarginToIsolatedMargin UserUniversalTransferType = "MARGIN_ISOLATEDMARGIN"
267+
UserUniversalTransferTypeIsolatedMarginToIsolatedMargin UserUniversalTransferType = "ISOLATEDMARGIN_ISOLATEDMARGIN"
268+
UserUniversalTransferTypeMainToFunding UserUniversalTransferType = "MAIN_FUNDING"
269+
UserUniversalTransferTypeFundingToMain UserUniversalTransferType = "FUNDING_MAIN"
270+
UserUniversalTransferTypeFundingToUmFutures UserUniversalTransferType = "FUNDING_UMFUTURE"
271+
UserUniversalTransferTypeUmFuturesToFunding UserUniversalTransferType = "UMFUTURE_FUNDING"
272+
UserUniversalTransferTypeMarginToFunding UserUniversalTransferType = "MARGIN_FUNDING"
273+
UserUniversalTransferTypeFundingToMargin UserUniversalTransferType = "FUNDING_MARGIN"
274+
UserUniversalTransferTypeFundingToCmFutures UserUniversalTransferType = "FUNDING_CMFUTURE"
275+
UserUniversalTransferTypeCmFuturesToFunding UserUniversalTransferType = "CMFUTURE_FUNDING"
276+
UserUniversalTransferTypeMainToOption UserUniversalTransferType = "MAIN_OPTION"
277+
UserUniversalTransferTypeOptionToMain UserUniversalTransferType = "OPTION_MAIN"
278+
UserUniversalTransferTypeUmFuturesToOption UserUniversalTransferType = "UMFUTURE_OPTION"
279+
UserUniversalTransferTypeOptionToUmFutures UserUniversalTransferType = "OPTION_UMFUTURE"
280+
UserUniversalTransferTypeMarginToOption UserUniversalTransferType = "MARGIN_OPTION"
281+
UserUniversalTransferTypeOptionToMargin UserUniversalTransferType = "OPTION_MARGIN"
282+
UserUniversalTransferTypeFundingToOption UserUniversalTransferType = "FUNDING_OPTION"
283+
UserUniversalTransferTypeOptionToFunding UserUniversalTransferType = "OPTION_FUNDING"
284+
UserUniversalTransferTypeMainToPortfolioMargin UserUniversalTransferType = "MAIN_PORTFOLIO_MARGIN"
285+
UserUniversalTransferTypePortfolioMarginToMain UserUniversalTransferType = "PORTFOLIO_MARGIN_MAIN"
286+
UserUniversalTransferTypeMainToIsolatedMargin UserUniversalTransferType = "MAIN_ISOLATED_MARGIN"
287+
UserUniversalTransferTypeIsolatedMarginToMain UserUniversalTransferType = "ISOLATED_MARGIN_MAIN"
288+
289+
UserUniversalTransferStatusTypePending UserUniversalTransferStatusType = "PENDING"
290+
UserUniversalTransferStatusTypeConfirmed UserUniversalTransferStatusType = "CONFIRMED"
291+
UserUniversalTransferStatusTypeFailed UserUniversalTransferStatusType = "FAILED"
248292
)
249293

250294
func currentTimestamp() int64 {
@@ -1038,3 +1082,8 @@ func (c *Client) NewSubAccountFuturesTransferV1Service() *SubAccountFuturesTrans
10381082
func (c *Client) NewSubAccountTransferHistoryService() *SubAccountTransferHistoryService {
10391083
return &SubAccountTransferHistoryService{c: c}
10401084
}
1085+
1086+
// NewListUserUniversalTransferService Query User Universal Transfer History
1087+
func (c *Client) NewListUserUniversalTransferService() *ListUserUniversalTransferService {
1088+
return &ListUserUniversalTransferService{c: c}
1089+
}

v2/user_universal_transfer.go

+104-103
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,23 @@ package binance
1111

1212
import (
1313
"context"
14+
"net/http"
1415
)
1516

1617
// CreateUserUniversalTransferService submits a transfer request.
1718
//
1819
// See https://binance-docs.github.io/apidocs/spot/en/#user-universal-transfer-user_data
1920
type CreateUserUniversalTransferService struct {
2021
c *Client
21-
types string
22+
types UserUniversalTransferType
2223
asset string
2324
amount float64
2425
fromSymbol *string
2526
toSymbol *string
2627
}
2728

2829
// Coin sets the coin parameter (MANDATORY).
29-
func (s *CreateUserUniversalTransferService) Type(v string) *CreateUserUniversalTransferService {
30+
func (s *CreateUserUniversalTransferService) Type(v UserUniversalTransferType) *CreateUserUniversalTransferService {
3031
s.types = v
3132
return s
3233
}
@@ -94,108 +95,108 @@ type CreateUserUniversalTransferResponse struct {
9495
// ListUserUniversalTransfer fetches transfer history.
9596
//
9697
// See https://binance-docs.github.io/apidocs/spot/en/#query-user-universal-transfer-history-user_data
97-
// type ListUserUniversalTransfer struct {
98-
// c *Client
99-
// types string
100-
// startTime *int64
101-
// endTime *int64
102-
// current *int
103-
// size *int
104-
// fromSymbol *string
105-
// toSymbol *string
106-
// }
107-
108-
// // Type sets the type parameter.
109-
// func (s *ListUserUniversalTransfer) Type(v string) *ListUserUniversalTransfer {
110-
// s.types = v
111-
// return s
112-
// }
113-
114-
// // StartTime sets the startTime parameter.
115-
// func (s *ListUserUniversalTransfer) StartTime(v int64) *ListUserUniversalTransfer {
116-
// s.startTime = &v
117-
// return s
118-
// }
119-
120-
// // EndTime sets the startTime parameter.
121-
// func (s *ListUserUniversalTransfer) EndTime(v int64) *ListUserUniversalTransfer {
122-
// s.startTime = &v
123-
// return s
124-
// }
125-
126-
// // Current sets the current parameter.
127-
// func (s *ListUserUniversalTransfer) Current(v int) *ListUserUniversalTransfer {
128-
// s.current = &v
129-
// return s
130-
// }
131-
132-
// // Size sets the size parameter.
133-
// func (s *ListUserUniversalTransfer) Size(v int) *ListUserUniversalTransfer {
134-
// s.current = &v
135-
// return s
136-
// }
137-
138-
// // FromSymbol set fromSymbol
139-
// func (s *ListUserUniversalTransfer) FromSymbol(v string) *ListUserUniversalTransfer {
140-
// s.fromSymbol = &v
141-
// return s
142-
// }
143-
144-
// // ToSymbol set toSymbol
145-
// func (s *ListUserUniversalTransfer) ToSymbol(v string) *ListUserUniversalTransfer {
146-
// s.toSymbol = &v
147-
// return s
148-
// }
98+
type ListUserUniversalTransferService struct {
99+
c *Client
100+
transferType UserUniversalTransferType
101+
startTime *int64
102+
endTime *int64
103+
current *int
104+
size *int
105+
fromSymbol *string
106+
toSymbol *string
107+
}
108+
109+
// Type sets the type parameter.
110+
func (s *ListUserUniversalTransferService) Type(v UserUniversalTransferType) *ListUserUniversalTransferService {
111+
s.transferType = v
112+
return s
113+
}
114+
115+
// StartTime sets the startTime parameter.
116+
func (s *ListUserUniversalTransferService) StartTime(v int64) *ListUserUniversalTransferService {
117+
s.startTime = &v
118+
return s
119+
}
120+
121+
// EndTime sets the startTime parameter.
122+
func (s *ListUserUniversalTransferService) EndTime(v int64) *ListUserUniversalTransferService {
123+
s.endTime = &v
124+
return s
125+
}
126+
127+
// Current sets the current parameter.
128+
func (s *ListUserUniversalTransferService) Current(v int) *ListUserUniversalTransferService {
129+
s.current = &v
130+
return s
131+
}
132+
133+
// Size sets the size parameter.
134+
func (s *ListUserUniversalTransferService) Size(v int) *ListUserUniversalTransferService {
135+
s.size = &v
136+
return s
137+
}
138+
139+
// FromSymbol set fromSymbol
140+
func (s *ListUserUniversalTransferService) FromSymbol(v string) *ListUserUniversalTransferService {
141+
s.fromSymbol = &v
142+
return s
143+
}
144+
145+
// ToSymbol set toSymbol
146+
func (s *ListUserUniversalTransferService) ToSymbol(v string) *ListUserUniversalTransferService {
147+
s.toSymbol = &v
148+
return s
149+
}
149150

150151
// // Do sends the request.
151-
// func (s *ListUserUniversalTransfer) Do(ctx context.Context) (res []*TransferResult, err error) {
152-
// r := &request{
153-
// method: "GET",
154-
// endpoint: "/sapi/v1/asset/transfer",
155-
// secType: secTypeSigned,
156-
// }
157-
// r.setParam("types", s.types)
158-
// if s.startTime != nil {
159-
// r.setParam("startTime", *s.startTime)
160-
// }
161-
// if s.endTime != nil {
162-
// r.setParam("endTime", *s.endTime)
163-
// }
164-
// if s.current != nil {
165-
// r.setParam("current", *s.current)
166-
// }
167-
// if s.size != nil {
168-
// r.setParam("size", *s.size)
169-
// }
170-
// if s.fromSymbol != nil {
171-
// r.setParam("fromSymbol", *s.fromSymbol)
172-
// }
173-
// if s.toSymbol != nil {
174-
// r.setParam("toSymbol", *s.toSymbol)
175-
// }
176-
// data, err := s.c.callAPI(ctx, r)
177-
// if err != nil {
178-
// return
179-
// }
180-
// res = make([]*TransferResult, 0)
181-
// err = json.Unmarshal(data, &res)
182-
// if err != nil {
183-
// return
184-
// }
185-
// return res, nil
186-
// }
152+
func (s *ListUserUniversalTransferService) Do(ctx context.Context) (res *UserUniversalTransferResponse, err error) {
153+
r := &request{
154+
method: http.MethodGet,
155+
endpoint: "/sapi/v1/asset/transfer",
156+
secType: secTypeSigned,
157+
}
158+
r.setParam("type", s.transferType)
159+
if s.startTime != nil {
160+
r.setParam("startTime", *s.startTime)
161+
}
162+
if s.endTime != nil {
163+
r.setParam("endTime", *s.endTime)
164+
}
165+
if s.current != nil {
166+
r.setParam("current", *s.current)
167+
}
168+
if s.size != nil {
169+
r.setParam("size", *s.size)
170+
}
171+
if s.fromSymbol != nil {
172+
r.setParam("fromSymbol", *s.fromSymbol)
173+
}
174+
if s.toSymbol != nil {
175+
r.setParam("toSymbol", *s.toSymbol)
176+
}
177+
data, err := s.c.callAPI(ctx, r)
178+
if err != nil {
179+
return
180+
}
181+
res = new(UserUniversalTransferResponse)
182+
err = json.Unmarshal(data, &res)
183+
if err != nil {
184+
return
185+
}
186+
return res, nil
187+
}
187188

188189
// // Withdraw represents a single withdraw entry.
189-
// type TransferResult struct {
190-
// Total uint8 `json:"total"`
191-
// Transfer []Transfer `json:"rows"`
192-
// }
193-
194-
// type Transfer struct {
195-
// Asset string `json:"asset"`
196-
// Amount string `json:"amount"`
197-
// Type string `json:"type"`
198-
// Status string `json:"status"`
199-
// TranId string `json:"tranId"`
200-
// Timestamp string `json:"timestamp"`
201-
// }
190+
type UserUniversalTransferResponse struct {
191+
Total int64 `json:"total"`
192+
Results []*UserUniversalTransfer `json:"rows"`
193+
}
194+
195+
type UserUniversalTransfer struct {
196+
Asset string `json:"asset"`
197+
Amount string `json:"amount"`
198+
Type UserUniversalTransferType `json:"type"`
199+
Status UserUniversalTransferStatusType `json:"status"`
200+
TranId int64 `json:"tranId"`
201+
Timestamp int64 `json:"timestamp"`
202+
}

v2/user_universal_transfer_test.go

+66-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package binance
22

33
import (
4+
"fmt"
45
"testing"
6+
"time"
57

68
"github.com/stretchr/testify/suite"
79
)
@@ -23,7 +25,7 @@ func (s *userUniversalTransferTestSuite) TestUserUniversalTransfer() {
2325
s.mockDo(data, nil)
2426
defer s.assertDo()
2527

26-
types := "MAIN_C2C"
28+
types := UserUniversalTransferTypeMainToUmFutures
2729
asset := "USDT"
2830
amount := 0.1
2931
fromSymbol := "USDT"
@@ -52,3 +54,66 @@ func (s *userUniversalTransferTestSuite) TestUserUniversalTransfer() {
5254
r.NoError(err)
5355
r.Equal(int64(13526853623), res.ID)
5456
}
57+
58+
func (s *userUniversalTransferTestSuite) TestListUserUniversalTransfer() {
59+
data := []byte(`{
60+
"total":2,
61+
"rows":[
62+
{
63+
"asset":"USDT",
64+
"amount":"1",
65+
"type":"MAIN_UMFUTURE",
66+
"status": "CONFIRMED",
67+
"tranId": 11415955596,
68+
"timestamp":1544433328000
69+
},
70+
{
71+
"asset":"USDT",
72+
"amount":"2",
73+
"type":"MAIN_UMFUTURE",
74+
"status": "CONFIRMED",
75+
"tranId": 11366865406,
76+
"timestamp":1544433328000
77+
}
78+
]
79+
}`)
80+
s.mockDo(data, nil)
81+
defer s.assertDo()
82+
83+
types := UserUniversalTransferTypeMainToUmFutures
84+
startTime := time.Date(2018, 12, 10, 0, 0, 0, 0, time.UTC).UnixMilli()
85+
endTime := time.Date(2018, 12, 11, 0, 0, 0, 0, time.UTC).UnixMilli()
86+
current := 1
87+
size := 10
88+
89+
s.assertReq(func(r *request) {
90+
fmt.Println(r.query)
91+
e := newSignedRequest().setParams(params{
92+
"type": string(types),
93+
"startTime": startTime,
94+
"endTime": endTime,
95+
"current": current,
96+
"size": size,
97+
})
98+
s.assertRequestEqual(e, r)
99+
})
100+
101+
res, err := s.client.NewListUserUniversalTransferService().
102+
Type(types).
103+
StartTime(startTime).
104+
EndTime(endTime).
105+
Current(current).
106+
Size(size).
107+
Do(newContext())
108+
109+
r := s.r()
110+
r.NoError(err)
111+
r.Equal(res.Total, int64(2))
112+
results := res.Results
113+
r.Equal(int64(11415955596), results[0].TranId)
114+
r.Equal("USDT", results[0].Asset)
115+
r.Equal("1", results[0].Amount)
116+
r.Equal(UserUniversalTransferTypeMainToUmFutures, results[0].Type)
117+
r.Equal(UserUniversalTransferStatusTypeConfirmed, results[0].Status)
118+
r.Equal(int64(1544433328000), results[0].Timestamp)
119+
}

0 commit comments

Comments
 (0)