-
Notifications
You must be signed in to change notification settings - Fork 7
/
tx_reqs.go
99 lines (85 loc) · 2.55 KB
/
tx_reqs.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
package rest
import (
"net/http"
"github.com/gorilla/mux"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/rest"
"github.com/coinexchain/cet-sdk/modules/bankx/internal/types"
"github.com/coinexchain/cosmos-utils/client/restutil"
)
type (
sendReq struct {
BaseReq rest.BaseReq `json:"base_req"`
Amount sdk.Coins `json:"amount"`
UnlockTime int64 `json:"unlock_time"`
}
memoReq struct {
BaseReq rest.BaseReq `json:"base_req"`
Required bool `json:"memo_required"`
}
sendSupervisedReq struct {
BaseReq rest.BaseReq `json:"base_req"`
Amount sdk.Coin `json:"amount"`
UnlockTime int64 `json:"unlock_time"`
Sender string `json:"sender,omitempty"`
Supervisor string `json:"supervisor,omitempty"`
Reward int64 `json:"reward,omitempty"`
Operation byte `json:"operation"`
}
)
func (req *sendReq) New() restutil.RestReq {
return new(sendReq)
}
func (req *sendReq) GetBaseReq() *rest.BaseReq {
return &req.BaseReq
}
func (req *sendReq) GetMsg(r *http.Request, sender sdk.AccAddress) (sdk.Msg, error) {
toAddr := getAddr(r)
return types.NewMsgSend(sender, toAddr, req.Amount, req.UnlockTime), nil
}
func (req *memoReq) New() restutil.RestReq {
return new(memoReq)
}
func (req *memoReq) GetBaseReq() *rest.BaseReq {
return &req.BaseReq
}
func (req *memoReq) GetMsg(r *http.Request, addr sdk.AccAddress) (sdk.Msg, error) {
return types.NewMsgSetTransferMemoRequired(addr, req.Required), nil
}
func (req *sendSupervisedReq) New() restutil.RestReq {
return new(sendSupervisedReq)
}
func (req *sendSupervisedReq) GetBaseReq() *rest.BaseReq {
return &req.BaseReq
}
func (req *sendSupervisedReq) GetMsg(r *http.Request, addr sdk.AccAddress) (sdk.Msg, error) {
toAddr := getAddr(r)
var fromAddr sdk.AccAddress
var supervisorAddr sdk.AccAddress
var err error
if req.Sender != "" {
if fromAddr, err = sdk.AccAddressFromBech32(req.Sender); err != nil {
return nil, err
}
}
if req.Supervisor != "" {
if supervisorAddr, err = sdk.AccAddressFromBech32(req.Supervisor); err != nil {
return nil, err
}
}
if req.Operation == types.Return || req.Operation == types.EarlierUnlockBySupervisor {
supervisorAddr = addr
} else {
fromAddr = addr
}
return types.NewMsgSupervisedSend(fromAddr, supervisorAddr, toAddr, req.Amount, req.UnlockTime,
req.Reward, req.Operation), nil
}
func getAddr(r *http.Request) sdk.AccAddress {
vars := mux.Vars(r)
addr, err := sdk.AccAddressFromBech32(vars["address"])
if err != nil {
return nil
}
return addr
}