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  }