forked from nntaoli-project/goex
-
Notifications
You must be signed in to change notification settings - Fork 1
/
OKExWallet.go
200 lines (179 loc) · 5.65 KB
/
OKExWallet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
package okex
import (
"fmt"
. "github.com/nntaoli-project/GoEx"
"github.com/pkg/errors"
"time"
)
const (
SUB_ACCOUNT = iota //子账户
SPOT // 币币交易
_
FUTURE //交割合约
C2C //法币
SPOT_MARGIN //币币杠杆交易
WALLET // 资金账户
_
TIPS //余币宝
SWAP //永续合约
)
const (
WITHDRAWAL_OKCOIN int = 2 //提币到okcoin国际站
WITHDRAWAL_OKEx = 3 //提币到okex,站内提币
WITHDRAWAL_COIN = 4 //提币到数字货币地址,跨平台提币或者提到自己钱包
)
type TransferParameter struct {
Currency string `json:"currency"`
From int `json:"from"`
To int `json:"to"`
Amount float64 `json:"amount"`
SubAccount string `json:"sub_account"`
InstrumentId string `json:"instrument_id"`
ToInstrumentId string `json:"to_instrument_id"`
}
type WithdrawParameter struct {
Currency string `json:"currency"`
Amount float64 `json:"amount,string"`
Destination int `json:"destination"` //提币到(2:OKCoin国际 3:OKEx 4:数字货币地址)
ToAddress string `json:"to_address"`
TradePwd string `json:"trade_pwd"`
Fee string `json:"fee"`
}
type OKExWallet struct {
*OKEx
}
func (ok *OKExWallet) GetAccount() (*Account, error) {
var response []struct {
Balance float64 `json:"balance,string"`
Available float64 `json:"available,string"`
Currency string `json:"currency"`
Hold float64 `json:"hold,string"`
}
err := ok.DoRequest("GET", "/api/account/v3/wallet", "", &response)
if err != nil {
return nil, err
}
var acc Account
acc.SubAccounts = make(map[Currency]SubAccount, 2)
acc.Exchange = OKEX
for _, itm := range response {
currency := NewCurrency(itm.Currency, "")
acc.SubAccounts[currency] = SubAccount{
Currency: currency,
Amount: itm.Balance,
ForzenAmount: itm.Hold,
}
}
return &acc, nil
}
/*
解释说明
from或to指定为0时,sub_account为必填项。
当from为0时,to只能填6,即子账户的资金账户只能转到母账户的资金账户。
当from指定为6,to指定为1-9,且sub_account填写子账户名时,可从母账户直接划转至子账户对应的币币、合约等账户。
from或to指定为5时,instrument_id为必填项。
*/
func (ok *OKExWallet) Transfer(param TransferParameter) error {
var response struct {
Result bool `json:"result"`
ErrorCode string `json:"code"`
ErrorMessage string `json:"message"`
}
reqBody, _, _ := ok.BuildRequestBody(param)
println(reqBody)
err := ok.DoRequest("POST", "/api/account/v3/transfer", reqBody, &response)
if err != nil {
return err
}
if !response.Result {
return errors.New(response.ErrorMessage)
}
return nil
}
/*
认证过的数字货币地址、邮箱或手机号。某些数字货币地址格式为:地址+标签,例:"ARDOR-7JF3-8F2E-QUWZ-CAN7F:123456"
*/
func (ok *OKExWallet) Withdrawal(param WithdrawParameter) (withdrawId string, err error) {
var response struct {
Result bool `json:"result"`
WithdrawId string `json:"withdraw_id"`
ErrorCode string `json:"code"`
ErrorMessage string `json:"message"`
}
reqBody, _, _ := ok.BuildRequestBody(param)
err = ok.DoRequest("POST", "/api/account/v3/withdrawal", reqBody, &response) //
if err != nil {
return
}
if !response.Result {
err = errors.New(response.ErrorMessage)
return
}
withdrawId = response.WithdrawId
return
}
type DepositAddress struct {
Address string `json:"address"`
Tag string `json:"tag"`
PaymentId string `json:"payment_id"`
Currency string `json:"currency"`
CanDeposit int `json:"can_deposit"`
CanWithdraw int `json:"can_withdraw"`
Memo string `json:"memo"` //eos need
}
func (ok *OKExWallet) GetDepositAddress(currency Currency) ([]DepositAddress, error) {
urlPath := fmt.Sprintf("/api/account/v3/deposit/address?currency=%s", currency.Symbol)
var response []DepositAddress
err := ok.DoRequest("GET", urlPath, "", &response)
if err != nil {
return nil, err
}
return response, nil
}
type WithdrawFee struct {
Currency string `json:"currency"`
MaxFee string `json:"max_fee"`
MinFee string `json:"min_fee"`
}
func (ok *OKExWallet) GetWithDrawalFee(currency *Currency) ([]WithdrawFee, error) {
urlPath := "/api/account/v3/withdrawal/fee"
if currency != nil && *currency != UNKNOWN {
urlPath += "?currency=" + currency.Symbol
}
var response []WithdrawFee
err := ok.DoRequest("GET", urlPath, "", &response)
if err != nil {
return nil, err
}
return response, nil
}
type DepositWithDrawHistory struct {
WithdrawalId string `json:"withdrawal_id,omitempty"`
Currency string `json:"currency"`
Txid string `json:"txid"`
Amount float64 `json:"amount,string"`
From string `json:"from,omitempty"`
To string `json:"to"`
Memo string `json:"memo,omitempty"`
Fee string `json:"fee"`
Status int `json:"status,string"`
Timestamp time.Time `json:"timestamp"`
}
func (ok *OKExWallet) GetWithDrawalHistory(currency *Currency) ([]DepositWithDrawHistory, error) {
urlPath := "/api/account/v3/withdrawal/history"
if currency != nil && *currency != UNKNOWN {
urlPath += "/" + currency.Symbol
}
var response []DepositWithDrawHistory
err := ok.DoRequest("GET", urlPath, "", &response)
return response, err
}
func (ok *OKExWallet) GetDepositHistory(currency *Currency) ([]DepositWithDrawHistory, error) {
urlPath := "/api/account/v3/deposit/history"
if currency != nil && *currency != UNKNOWN {
urlPath += "/" + currency.Symbol
}
var response []DepositWithDrawHistory
err := ok.DoRequest("GET", urlPath, "", &response)
return response, err
}