/
msg.go
129 lines (105 loc) · 3.75 KB
/
msg.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
package types
import (
fmt "fmt"
errorsmod "cosmossdk.io/errors"
transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
var (
_ sdk.Msg = &MsgCreateDenomMetadata{}
_ sdk.Msg = &MsgUpdateDenomMetadata{}
)
const (
TypeMsgCreateDenomMetadata = "create_denom_metadata"
TypeMsgUpdateDenomMetadata = "update_denom_metadata"
)
// NewMsgCreateDenomMetadata creates new instance of MsgCreateDenomMetadata
func NewMsgCreateDenomMetadata(
sender sdk.Address,
metadatas []DenomMetadata,
) *MsgCreateDenomMetadata {
return &MsgCreateDenomMetadata{
SenderAddress: sender.String(),
Metadatas: metadatas,
}
}
// Route returns the name of the module
func (msg MsgCreateDenomMetadata) Route() string { return RouterKey }
// Type returns the the action
func (msg MsgCreateDenomMetadata) Type() string { return TypeMsgCreateDenomMetadata }
// ValidateBasic runs stateless checks on the message
func (msg MsgCreateDenomMetadata) ValidateBasic() error {
// this also checks for empty addresses
if _, err := sdk.AccAddressFromBech32(msg.SenderAddress); err != nil {
return errorsmod.Wrapf(err, "invalid sender address: %s", err.Error())
}
for _, metadata := range msg.Metadatas {
err := metadata.TokenMetadata.Validate()
if err != nil {
return err
}
denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace)
// If path is empty, then the denom is not ibc denom
if denomTrace.Path != "" {
denom := denomTrace.IBCDenom()
if denom != metadata.TokenMetadata.Base {
return fmt.Errorf("denom parse from denom trace does not match metadata base denom. base denom: %s, expected: %s", metadata.TokenMetadata.Base, denom)
}
}
}
return nil
}
// GetSignBytes encodes the message for signing
func (msg *MsgCreateDenomMetadata) GetSignBytes() []byte {
return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(msg))
}
// GetSigners defines whose signature is required
func (msg MsgCreateDenomMetadata) GetSigners() []sdk.AccAddress {
from, _ := sdk.AccAddressFromBech32(msg.SenderAddress)
return []sdk.AccAddress{from}
}
// NewMsgCreateDenomMetadata creates new instance of MsgCreateDenomMetadata
func NewMsgUpdateDenomMetadata(
sender sdk.Address,
metadatas []DenomMetadata,
) *MsgUpdateDenomMetadata {
return &MsgUpdateDenomMetadata{
SenderAddress: sender.String(),
Metadatas: metadatas,
}
}
// Route returns the name of the module
func (msg MsgUpdateDenomMetadata) Route() string { return RouterKey }
// Type returns the the action
func (msg MsgUpdateDenomMetadata) Type() string { return TypeMsgUpdateDenomMetadata }
// ValidateBasic runs stateless checks on the message
func (msg MsgUpdateDenomMetadata) ValidateBasic() error {
// this also checks for empty addresses
if _, err := sdk.AccAddressFromBech32(msg.SenderAddress); err != nil {
return errorsmod.Wrapf(err, "invalid sender address: %s", err.Error())
}
for _, metadata := range msg.Metadatas {
err := metadata.TokenMetadata.Validate()
if err != nil {
return err
}
denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace)
// If path is empty, then the denom is not ibc denom
if denomTrace.Path != "" {
denom := denomTrace.IBCDenom()
if denom != metadata.TokenMetadata.Base {
return fmt.Errorf("denom parse from denom trace does not match metadata base denom. base denom: %s, expected: %s", metadata.TokenMetadata.Base, denom)
}
}
}
return nil
}
// GetSignBytes encodes the message for signing
func (msg *MsgUpdateDenomMetadata) GetSignBytes() []byte {
return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(msg))
}
// GetSigners defines whose signature is required
func (msg MsgUpdateDenomMetadata) GetSigners() []sdk.AccAddress {
from, _ := sdk.AccAddressFromBech32(msg.SenderAddress)
return []sdk.AccAddress{from}
}