mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-22 06:53:52 +00:00
Merge pull request #10 from c9s/refactor-deposit-types
move deposit type to global type and add max deposit history support
This commit is contained in:
commit
0408aa96b1
|
@ -105,6 +105,9 @@ func (e *Exchange) QueryWithdrawHistory(ctx context.Context, asset string, since
|
|||
status = "failure"
|
||||
case 6:
|
||||
status = "completed"
|
||||
|
||||
default:
|
||||
status = fmt.Sprintf("unsupported code: %d", d.Status)
|
||||
}
|
||||
|
||||
txIDs[d.TxID] = struct{}{}
|
||||
|
@ -128,17 +131,7 @@ func (e *Exchange) QueryWithdrawHistory(ctx context.Context, asset string, since
|
|||
return allWithdraws, nil
|
||||
}
|
||||
|
||||
type Deposit struct {
|
||||
Time time.Time `json:"time"`
|
||||
Amount float64 `json:"amount"`
|
||||
Asset string `json:"asset"`
|
||||
Address string `json:"address"`
|
||||
AddressTag string `json:"addressTag"`
|
||||
TransactionID string `json:"txId"`
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
func (e *Exchange) QueryDepositHistory(ctx context.Context, asset string, since, until time.Time) (allDeposits []Deposit, err error) {
|
||||
func (e *Exchange) QueryDepositHistory(ctx context.Context, asset string, since, until time.Time) (allDeposits []types.Deposit, err error) {
|
||||
startTime := since
|
||||
txIDs := map[string]struct{}{}
|
||||
for startTime.Before(until) {
|
||||
|
@ -165,18 +158,20 @@ func (e *Exchange) QueryDepositHistory(ctx context.Context, asset string, since,
|
|||
}
|
||||
|
||||
// 0(0:pending,6: credited but cannot withdraw, 1:success)
|
||||
status := ""
|
||||
status := types.DepositStatus(fmt.Sprintf("code: %d", d.Status))
|
||||
|
||||
switch d.Status {
|
||||
case 0:
|
||||
status = "pending"
|
||||
status = types.DepositPending
|
||||
case 6:
|
||||
status = "credited"
|
||||
// https://www.binance.com/en/support/faq/115003736451
|
||||
status = types.DepositCredited
|
||||
case 1:
|
||||
status = "success"
|
||||
status = types.DepositSuccess
|
||||
}
|
||||
|
||||
txIDs[d.TxID] = struct{}{}
|
||||
allDeposits = append(allDeposits, Deposit{
|
||||
allDeposits = append(allDeposits, types.Deposit{
|
||||
Time: time.Unix(0, d.InsertTime*int64(time.Millisecond)),
|
||||
Asset: d.Asset,
|
||||
Amount: d.Amount,
|
||||
|
|
|
@ -83,6 +83,52 @@ func (e *Exchange) QueryAccount(ctx context.Context) (*types.Account, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (e *Exchange) QueryDepositHistory(ctx context.Context, asset string, since, until time.Time) (allDeposits []types.Deposit, err error) {
|
||||
deposits, err := e.client.AccountService.NewGetDepositHistoryRequest().
|
||||
Currency(asset).
|
||||
From(since.Unix()).
|
||||
To(until.Unix()).Do(ctx)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, d := range deposits {
|
||||
allDeposits = append(allDeposits, types.Deposit{
|
||||
Time: time.Unix(d.CreatedAt, 0),
|
||||
Amount: util.MustParseFloat(d.Amount),
|
||||
Asset: d.Currency,
|
||||
Address: "", // not supported
|
||||
AddressTag: "", // not supported
|
||||
TransactionID: d.TxID,
|
||||
Status: convertDepositState(d.State),
|
||||
})
|
||||
}
|
||||
|
||||
return allDeposits, err
|
||||
}
|
||||
|
||||
func convertDepositState(a string) types.DepositStatus {
|
||||
switch a {
|
||||
case "submitting", "submitted", "checking":
|
||||
return types.DepositPending
|
||||
|
||||
case "accepted":
|
||||
return types.DepositSuccess
|
||||
|
||||
case "rejected":
|
||||
return types.DepositRejected
|
||||
|
||||
case "cancelled":
|
||||
return types.DepositCancelled
|
||||
|
||||
case "suspect", "refunded":
|
||||
|
||||
}
|
||||
|
||||
return types.DepositStatus(a)
|
||||
}
|
||||
|
||||
func (e *Exchange) QueryAccountBalances(ctx context.Context) (types.BalanceMap, error) {
|
||||
accounts, err := e.client.AccountService.Accounts()
|
||||
if err != nil {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package max
|
||||
|
||||
import "context"
|
||||
|
||||
type AccountService struct {
|
||||
client *RestClient
|
||||
}
|
||||
|
@ -108,3 +110,79 @@ func (s *AccountService) Me() (*UserInfo, error) {
|
|||
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
type Deposit struct {
|
||||
Currency string `json:"currency"`
|
||||
CurrencyVersion string `json:"currency_version"` // "eth"
|
||||
Amount string `json:"amount"`
|
||||
Fee string `json:"fee"`
|
||||
TxID string `json:"txid"`
|
||||
State string `json:"state"`
|
||||
Confirmations int `json:"confirmations"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
}
|
||||
|
||||
type GetDepositHistoryRequestParams struct {
|
||||
*PrivateRequestParams
|
||||
|
||||
Currency string `json:"currency"`
|
||||
From int64 `json:"from,omitempty"` // seconds
|
||||
To int64 `json:"to,omitempty"` // seconds
|
||||
State string `json:"state,omitempty"` // submitting, submitted, rejected, accepted, checking, refunded, cancelled, suspect
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
type GetDepositHistoryRequest struct {
|
||||
client *RestClient
|
||||
params GetDepositHistoryRequestParams
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) State(state string) *GetDepositHistoryRequest {
|
||||
r.params.State = state
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) Currency(currency string) *GetDepositHistoryRequest {
|
||||
r.params.Currency = currency
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) Limit(limit int) *GetDepositHistoryRequest {
|
||||
r.params.Limit = limit
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) From(from int64) *GetDepositHistoryRequest {
|
||||
r.params.From = from
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) To(to int64) *GetDepositHistoryRequest {
|
||||
r.params.To = to
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *GetDepositHistoryRequest) Do(ctx context.Context) (deposits []Deposit, err error) {
|
||||
req, err := r.client.newAuthenticatedRequest("GET", "v2/deposits", &r.params)
|
||||
if err != nil {
|
||||
return deposits, err
|
||||
}
|
||||
|
||||
response, err := r.client.sendRequest(req)
|
||||
if err != nil {
|
||||
return deposits, err
|
||||
}
|
||||
|
||||
if err := response.DecodeJSON(&deposits); err != nil {
|
||||
return deposits, err
|
||||
}
|
||||
|
||||
return deposits, err
|
||||
}
|
||||
|
||||
func (s *AccountService) NewGetDepositHistoryRequest() *GetDepositHistoryRequest {
|
||||
return &GetDepositHistoryRequest{
|
||||
client: s.client,
|
||||
}
|
||||
}
|
||||
|
|
30
pkg/types/deposit.go
Normal file
30
pkg/types/deposit.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
package types
|
||||
|
||||
import "time"
|
||||
|
||||
type DepositStatus string
|
||||
|
||||
const (
|
||||
DepositOther = DepositStatus("")
|
||||
|
||||
DepositPending = DepositStatus("pending")
|
||||
|
||||
DepositRejected = DepositStatus("rejected")
|
||||
|
||||
DepositSuccess = DepositStatus("success")
|
||||
|
||||
DepositCancelled = DepositStatus("cancelled")
|
||||
|
||||
// created but can not withdraw
|
||||
DepositCredited = DepositStatus("credited")
|
||||
)
|
||||
|
||||
type Deposit struct {
|
||||
Time time.Time `json:"time"`
|
||||
Amount float64 `json:"amount"`
|
||||
Asset string `json:"asset"`
|
||||
Address string `json:"address"`
|
||||
AddressTag string `json:"addressTag"`
|
||||
TransactionID string `json:"txId"`
|
||||
Status DepositStatus `json:"status"`
|
||||
}
|
Loading…
Reference in New Issue
Block a user