/
message_withdrawl.go
85 lines (70 loc) · 1.83 KB
/
message_withdrawl.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
package types
import (
sdkerrors "cosmossdk.io/errors"
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const TypeMsgWithdrawal = "withdrawal"
var _ sdk.Msg = &MsgWithdrawal{}
func NewMsgWithdrawal(creator,
receiver,
tokenA,
tokenB string,
sharesToRemove []math.Int,
tickIndexes []int64,
fees []uint64,
) *MsgWithdrawal {
return &MsgWithdrawal{
Creator: creator,
Receiver: receiver,
TokenA: tokenA,
TokenB: tokenB,
SharesToRemove: sharesToRemove,
TickIndexesAToB: tickIndexes,
Fees: fees,
}
}
func (msg *MsgWithdrawal) Route() string {
return RouterKey
}
func (msg *MsgWithdrawal) Type() string {
return TypeMsgWithdrawal
}
func (msg *MsgWithdrawal) GetSigners() []sdk.AccAddress {
creator, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
panic(err)
}
return []sdk.AccAddress{creator}
}
func (msg *MsgWithdrawal) GetSignBytes() []byte {
bz := ModuleCdc.MustMarshalJSON(msg)
return sdk.MustSortJSON(bz)
}
func (msg *MsgWithdrawal) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return sdkerrors.Wrapf(ErrInvalidAddress, "invalid creator address (%s)", err)
}
_, err = sdk.AccAddressFromBech32(msg.Receiver)
if err != nil {
return sdkerrors.Wrapf(ErrInvalidAddress, "invalid receiver address (%s)", err)
}
// Verify that the lengths of TickIndexes, Fees, SharesToRemove are all equal
if len(msg.Fees) != len(msg.TickIndexesAToB) ||
len(msg.SharesToRemove) != len(msg.TickIndexesAToB) {
return ErrUnbalancedTxArray
}
if len(msg.Fees) == 0 {
return ErrZeroWithdraw
}
for i := 0; i < len(msg.Fees); i++ {
if msg.SharesToRemove[i].LTE(math.ZeroInt()) {
return ErrZeroWithdraw
}
if err := ValidateTickFee(msg.TickIndexesAToB[i], msg.Fees[i]); err != nil {
return err
}
}
return nil
}