/
msgs.go
164 lines (136 loc) · 4.51 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
163
164
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
chanTypes "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types"
)
const RouterKey = ModuleName // this was defined in your key.go file
// MsgDeliverInbound defines a DeliverInbound message
type MsgDeliverInbound struct {
Messages []string
Nums []int
Ack int
Submitter sdk.AccAddress
}
var _ sdk.Msg = &MsgDeliverInbound{}
func NewMsgDeliverInbound(msgs *Messages, submitter sdk.AccAddress) MsgDeliverInbound {
return MsgDeliverInbound{
Messages: msgs.Messages,
Nums: msgs.Nums,
Ack: msgs.Ack,
Submitter: submitter,
}
}
// Route should return the name of the module
func (msg MsgDeliverInbound) Route() string { return RouterKey }
// Type should return the action
func (msg MsgDeliverInbound) Type() string { return "eventualSend" }
// ValidateBasic runs stateless checks on the message
func (msg MsgDeliverInbound) ValidateBasic() error {
if msg.Submitter.Empty() {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Submitter.String())
}
if len(msg.Messages) != len(msg.Nums) {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages and Nums must be the same length")
}
for i, num := range msg.Nums {
if len(msg.Messages[i]) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages cannot be empty")
}
if num < 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Nums cannot be negative")
}
}
if msg.Ack < 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Ack cannot be negative")
}
return nil
}
// GetSignBytes encodes the message for signing
func (msg MsgDeliverInbound) GetSignBytes() []byte {
// FIXME: This compensates for Amino maybe returning nil instead of empty slices.
if msg.Messages == nil {
msg.Messages = []string{}
}
if msg.Nums == nil {
msg.Nums = []int{}
}
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
}
// GetSigners defines whose signature is required
func (msg MsgDeliverInbound) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{msg.Submitter}
}
// MsgSendPacket sends an outgoing IBC packet
type MsgSendPacket struct {
Packet chanTypes.Packet `json:"packet" yaml:"packet"`
Sender sdk.AccAddress `json:"sender" yaml:"sender"`
}
var _ sdk.Msg = MsgSendPacket{}
// NewMsgSendPacket returns a new send request
func NewMsgSendPacket(packet chanTypes.Packet, sender sdk.AccAddress) MsgSendPacket {
return MsgSendPacket{
Packet: packet,
Sender: sender,
}
}
// Route implements sdk.Msg
func (msg MsgSendPacket) Route() string { return RouterKey }
// ValidateBasic implements sdk.Msg
func (msg MsgSendPacket) ValidateBasic() error {
if msg.Sender.Empty() {
return sdkerrors.ErrInvalidAddress
}
return msg.Packet.ValidateBasic()
}
// GetSignBytes implements sdk.Msg
func (msg MsgSendPacket) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
}
// GetSigners implements sdk.Msg
func (msg MsgSendPacket) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{msg.Sender}
}
// Type implements sdk.Msg
func (msg MsgSendPacket) Type() string {
return "sendpacket"
}
// MsgProvision defines a Provision message
type MsgProvision struct {
Nickname string `json:"nickname" yaml:"nickname"`
Address sdk.AccAddress `json:"address" yaml:"address"`
Submitter sdk.AccAddress `json:"submitter" yaml:"submitter"`
}
var _ sdk.Msg = &MsgProvision{}
func NewMsgProvision(nickname string, addr sdk.AccAddress, submitter sdk.AccAddress) MsgProvision {
return MsgProvision{
Nickname: nickname,
Address: addr,
Submitter: submitter,
}
}
// Route should return the name of the module
func (msg MsgProvision) Route() string { return RouterKey }
// Type should return the action
func (msg MsgProvision) Type() string { return "provision" }
// ValidateBasic runs stateless checks on the message
func (msg MsgProvision) ValidateBasic() error {
if msg.Submitter.Empty() {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Submitter.String())
}
if msg.Address.Empty() {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Address.String())
}
if len(msg.Nickname) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Nickname cannot be empty")
}
return nil
}
// GetSignBytes encodes the message for signing
func (msg MsgProvision) GetSignBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
}
// GetSigners defines whose signature is required
func (msg MsgProvision) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{msg.Submitter}
}