/
msgs.go
94 lines (84 loc) · 2.31 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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum/common/hexutil"
common "github.com/strangelove-ventures/hyperlane-cosmos/x/common"
)
var (
_ sdk.Msg = (*MsgDispatch)(nil)
_ sdk.Msg = (*MsgProcess)(nil)
)
// NewMsgDispatch creates a new MsgStoreCode instance
//
//nolint:interfacer
func NewMsgDispatch(sender string, destinationDomain uint32, recipientAddress string, messageBody string) *MsgDispatch {
return &MsgDispatch{
Sender: sender,
DestinationDomain: destinationDomain,
RecipientAddress: recipientAddress,
MessageBody: messageBody,
}
}
// ValidateBasic implements sdk.Msg
func (m MsgDispatch) ValidateBasic() error {
// Verify sender is a valid bech32 address
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return ErrMsgDispatchInvalidSender
}
// Verify destination domain != 0
if m.DestinationDomain == 0 {
return ErrMsgDispatchInvalidDomain
}
// Verify recipient address is in hex with a "0x" prefix
_, err = hexutil.Decode(m.RecipientAddress)
if err != nil {
return ErrMsgDispatchInvalidRecipient
}
// Verify message body is in hex with a "0x" prefix
_, err = hexutil.Decode(m.MessageBody)
if err != nil {
return ErrMsgDispatchInvalidMsgBody
}
return nil
}
// GetSigners implements sdk.Msg
func (m MsgDispatch) GetSigners() []sdk.AccAddress {
signer, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
panic(err)
}
return []sdk.AccAddress{signer}
}
// NewMsgProcess creates a new NewMsgProcess instance
//
//nolint:interfacer
func NewMsgProcess(sender sdk.AccAddress, metadata string, message string) *MsgProcess {
return &MsgProcess{
Sender: sender.String(),
Metadata: metadata,
Message: message,
}
}
// ValidateBasic implements sdk.Msg
func (m MsgProcess) ValidateBasic() error {
// Verify sender is a valid bech32 address
_, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
return ErrMsgProcessInvalidSender
}
// Verify metadata? With different types, what to verify?
// Verify message
if len(m.Message) < common.BODY_OFFSET {
return ErrMsgProcessInvalidMessage
}
return nil
}
// GetSigners implements sdk.Msg
func (m MsgProcess) GetSigners() []sdk.AccAddress {
signer, err := sdk.AccAddressFromBech32(m.Sender)
if err != nil {
panic(err)
}
return []sdk.AccAddress{signer}
}