github.com/InjectiveLabs/sdk-go@v1.53.0/chain/permissions/types/msgs.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 "cosmossdk.io/errors" 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 9 tftypes "github.com/InjectiveLabs/sdk-go/chain/tokenfactory/types" 10 ) 11 12 // constants 13 const ( 14 // RouterKey is the message route for slashing 15 routerKey = ModuleName 16 17 TypeMsgUpdateParams = "update_params" 18 TypeMsgCreateNamespace = "create_namespace" 19 TypeMsgDeleteNamespace = "delete_namespace" 20 TypeUpdateNamespace = "update_namespace" 21 TypeMsgUpdateNamespaceRoles = "update_namespace_roles" 22 TypeMsgRevokeNamespaceRoles = "revoke_namespace_roles" 23 TypeMsgClaimVoucher = "claim_voucher" 24 ) 25 26 var ( 27 _ sdk.Msg = &MsgUpdateParams{} 28 _ sdk.Msg = &MsgCreateNamespace{} 29 _ sdk.Msg = &MsgDeleteNamespace{} 30 _ sdk.Msg = &MsgUpdateNamespace{} 31 _ sdk.Msg = &MsgUpdateNamespaceRoles{} 32 _ sdk.Msg = &MsgRevokeNamespaceRoles{} 33 _ sdk.Msg = &MsgClaimVoucher{} 34 ) 35 36 func (m MsgUpdateParams) Route() string { return routerKey } 37 38 func (m MsgUpdateParams) Type() string { return TypeMsgUpdateParams } 39 40 func (m MsgUpdateParams) ValidateBasic() error { 41 if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { 42 return err 43 } 44 45 if err := m.Params.Validate(); err != nil { 46 return err 47 } 48 return nil 49 } 50 51 func (m *MsgUpdateParams) GetSignBytes() []byte { 52 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 53 } 54 55 func (m MsgUpdateParams) GetSigners() []sdk.AccAddress { 56 addr, _ := sdk.AccAddressFromBech32(m.Authority) 57 return []sdk.AccAddress{addr} 58 } 59 60 func (m MsgCreateNamespace) Route() string { return routerKey } 61 62 func (m MsgCreateNamespace) Type() string { return TypeMsgCreateNamespace } 63 64 func (msg MsgCreateNamespace) ValidateBasic() error { 65 if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { 66 return err 67 } 68 69 if err := msg.Namespace.Validate(); err != nil { 70 return err 71 } 72 return nil 73 } 74 75 func (m *MsgCreateNamespace) GetSignBytes() []byte { 76 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 77 } 78 79 func (m MsgCreateNamespace) GetSigners() []sdk.AccAddress { 80 addr, _ := sdk.AccAddressFromBech32(m.Sender) 81 return []sdk.AccAddress{addr} 82 } 83 84 func (m MsgDeleteNamespace) Route() string { return routerKey } 85 86 func (m MsgDeleteNamespace) Type() string { return TypeMsgDeleteNamespace } 87 88 func (m MsgDeleteNamespace) ValidateBasic() error { 89 if _, err := sdk.AccAddressFromBech32(m.Sender); err != nil { 90 return err 91 } 92 93 if _, _, err := tftypes.DeconstructDenom(m.NamespaceDenom); err != nil { 94 return errors.Wrap(err, "permissions namespace can only be applied to tokenfactory denoms") 95 } 96 return nil 97 } 98 99 func (m *MsgDeleteNamespace) GetSignBytes() []byte { 100 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 101 } 102 103 func (m MsgDeleteNamespace) GetSigners() []sdk.AccAddress { 104 addr, _ := sdk.AccAddressFromBech32(m.Sender) 105 return []sdk.AccAddress{addr} 106 } 107 108 func (m MsgUpdateNamespace) Route() string { return routerKey } 109 110 func (m MsgUpdateNamespace) Type() string { return TypeUpdateNamespace } 111 112 func (m MsgUpdateNamespace) ValidateBasic() error { 113 if _, err := sdk.AccAddressFromBech32(m.Sender); err != nil { 114 return err 115 } 116 117 if m.WasmHook != nil { 118 if _, err := sdk.AccAddressFromBech32(m.WasmHook.NewValue); err != nil { 119 return ErrInvalidWasmHook 120 } 121 } 122 return nil 123 } 124 125 func (m *MsgUpdateNamespace) GetSignBytes() []byte { 126 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 127 } 128 129 func (m MsgUpdateNamespace) GetSigners() []sdk.AccAddress { 130 addr, _ := sdk.AccAddressFromBech32(m.Sender) 131 return []sdk.AccAddress{addr} 132 } 133 134 func (m MsgUpdateNamespaceRoles) Route() string { return routerKey } 135 136 func (m MsgUpdateNamespaceRoles) Type() string { return TypeMsgUpdateNamespaceRoles } 137 138 func (msg MsgUpdateNamespaceRoles) ValidateBasic() error { 139 if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { 140 return err 141 } 142 if _, _, err := tftypes.DeconstructDenom(msg.NamespaceDenom); err != nil { 143 return errors.Wrap(err, "permissions namespace can only be applied to tokenfactory denoms") 144 } 145 146 for _, role := range msg.AddressRoles { 147 if _, err := sdk.AccAddressFromBech32(role.Address); err != nil { 148 return errors.Wrapf(err, "invalid address %s", role.Address) 149 } 150 } 151 152 return nil 153 } 154 155 func (m *MsgUpdateNamespaceRoles) GetSignBytes() []byte { 156 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 157 } 158 159 func (m MsgUpdateNamespaceRoles) GetSigners() []sdk.AccAddress { 160 addr, _ := sdk.AccAddressFromBech32(m.Sender) 161 return []sdk.AccAddress{addr} 162 } 163 164 func (m MsgRevokeNamespaceRoles) Route() string { return routerKey } 165 166 func (m MsgRevokeNamespaceRoles) Type() string { return TypeMsgRevokeNamespaceRoles } 167 168 func (msg MsgRevokeNamespaceRoles) ValidateBasic() error { 169 if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { 170 return err 171 } 172 173 if _, _, err := tftypes.DeconstructDenom(msg.NamespaceDenom); err != nil { 174 return errors.Wrap(err, "permissions namespace can only be applied to tokenfactory denoms") 175 } 176 177 // address_roles 178 foundAddresses := make(map[string]struct{}, len(msg.AddressRolesToRevoke)) 179 for _, addrRoles := range msg.AddressRolesToRevoke { 180 if _, err := sdk.AccAddressFromBech32(addrRoles.Address); err != nil { 181 return errors.Wrapf(err, "invalid address %s", addrRoles.Address) 182 } 183 if _, ok := foundAddresses[addrRoles.Address]; ok { 184 return errors.Wrapf(ErrInvalidRole, "address %s - revoking roles multiple times?", addrRoles.Address) 185 } 186 for _, role := range addrRoles.Roles { 187 if role == EVERYONE { 188 return errors.Wrapf(ErrInvalidRole, "role %s can not be set / revoked", EVERYONE) 189 } 190 } 191 foundAddresses[addrRoles.Address] = struct{}{} 192 } 193 return nil 194 } 195 196 func (m *MsgRevokeNamespaceRoles) GetSignBytes() []byte { 197 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 198 } 199 200 func (m MsgRevokeNamespaceRoles) GetSigners() []sdk.AccAddress { 201 addr, _ := sdk.AccAddressFromBech32(m.Sender) 202 return []sdk.AccAddress{addr} 203 } 204 205 func (m MsgClaimVoucher) Route() string { return routerKey } 206 207 func (m MsgClaimVoucher) Type() string { return TypeMsgClaimVoucher } 208 209 func (msg MsgClaimVoucher) ValidateBasic() error { 210 if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { 211 return err 212 } 213 214 if msg.Denom == "" { 215 return fmt.Errorf("invalid denom") 216 } 217 return nil 218 } 219 220 func (m *MsgClaimVoucher) GetSignBytes() []byte { 221 return sdk.MustSortJSON(ModuleCdc.MustMarshal(m)) 222 } 223 224 func (m MsgClaimVoucher) GetSigners() []sdk.AccAddress { 225 addr, _ := sdk.AccAddressFromBech32(m.Sender) 226 return []sdk.AccAddress{addr} 227 }