-
Notifications
You must be signed in to change notification settings - Fork 119
/
msgs.go
162 lines (142 loc) · 4.52 KB
/
msgs.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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/pkg/errors"
)
func NewMsgCreateDistribution(distributor sdk.AccAddress, DistributionType DistributionType, output []types.Output, authorizedRunner string) MsgCreateDistribution {
return MsgCreateDistribution{
Distributor: distributor.String(),
AuthorizedRunner: authorizedRunner,
DistributionType: DistributionType,
Output: output,
}
}
func (m MsgCreateDistribution) Route() string {
return RouterKey
}
func (m MsgCreateDistribution) Type() string {
return MsgTypeCreateDistribution
}
func (m MsgCreateDistribution) ValidateBasic() error {
// Validate distribution Type
_, ok := IsValidDistributionType(m.DistributionType.String())
if !ok {
return sdkerrors.Wrap(ErrInvalid, "Invalid Distribution Type")
}
// Validate length of output is not 0
if len(m.Output) == 0 {
return errors.Wrapf(ErrInvalid, "Outputlist cannot be empty")
}
_, err := sdk.AccAddressFromBech32(m.Distributor)
if err != nil {
return errors.Wrapf(ErrInvalid, "Invalid Distributor Address : %s", m.Distributor)
}
// Validator runner
_, err = sdk.AccAddressFromBech32(m.AuthorizedRunner)
if err != nil {
return errors.Wrapf(ErrInvalid, "Invalid Authorized Address : %s", m.AuthorizedRunner)
}
// Validate individual out records
for _, out := range m.Output {
_, err := sdk.AccAddressFromBech32(out.Address)
if err != nil {
return errors.Wrapf(ErrInvalid, "Invalid Recipient Address")
}
out.Coins.Sort()
if !out.Coins.IsValid() {
return errors.Wrapf(ErrInvalid, "Invalid Coins")
}
}
return nil
}
func NewMsgCreateUserClaim(userClaimAddress sdk.AccAddress, claimType DistributionType) MsgCreateUserClaim {
return MsgCreateUserClaim{
UserClaimAddress: userClaimAddress.String(),
UserClaimType: claimType,
}
}
func (m MsgCreateDistribution) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgCreateDistribution) GetSigners() []sdk.AccAddress {
addr, err := sdk.AccAddressFromBech32(m.Distributor)
if err != nil {
panic(err)
}
return []sdk.AccAddress{addr}
}
func (m MsgCreateUserClaim) Route() string {
return RouterKey
}
func (m MsgCreateUserClaim) Type() string {
return MsgTypeCreateUserClaim
}
func (m MsgCreateUserClaim) ValidateBasic() error {
_, err := sdk.AccAddressFromBech32(m.UserClaimAddress)
if err != nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, m.UserClaimAddress)
}
_, ok := IsValidClaimType(m.UserClaimType.String())
if !ok {
return sdkerrors.Wrap(ErrInvalid, m.UserClaimType.String())
}
return nil
}
func (m MsgCreateUserClaim) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgCreateUserClaim) GetSigners() []sdk.AccAddress {
addr, err := sdk.AccAddressFromBech32(m.UserClaimAddress)
// Should never panic as ValidateBasic checks address validity
if err != nil {
panic(err)
}
return []sdk.AccAddress{addr}
}
func NewMsgRunDistribution(runner string, distributionName string, distributionType DistributionType, distributionCount int64) MsgRunDistribution {
return MsgRunDistribution{
AuthorizedRunner: runner,
DistributionName: distributionName,
DistributionType: distributionType,
DistributionCount: distributionCount,
}
}
func (m MsgRunDistribution) Route() string {
return RouterKey
}
func (m MsgRunDistribution) Type() string {
return MsgTypeRunDistribution
}
func (m MsgRunDistribution) ValidateBasic() error {
//Validate DistributionType
_, ok := IsValidDistributionType(m.DistributionType.String())
if !ok {
return sdkerrors.Wrap(ErrInvalid, "Invalid Distribution Type")
}
// Validate distribution Name
if m.DistributionName == "" {
return sdkerrors.Wrap(ErrInvalid, m.DistributionName)
}
// Validator runner
_, err := sdk.AccAddressFromBech32(m.AuthorizedRunner)
if err != nil {
return errors.Wrapf(ErrInvalid, "Invalid Runner Address")
}
if m.DistributionCount > MaxRecordsPerBlock || m.DistributionCount <= 0 {
return errors.Wrapf(ErrInvalid, "Dispensation count cannot be greater than %d or less than 1", MaxRecordsPerBlock)
}
return nil
}
func (m MsgRunDistribution) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m))
}
func (m MsgRunDistribution) GetSigners() []sdk.AccAddress {
addr, err := sdk.AccAddressFromBech32(m.AuthorizedRunner)
// Should never panic as ValidateBasic checks address validity
if err != nil {
panic(err)
}
return []sdk.AccAddress{addr}
}