github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/types/tx.go (about)

     1  package types
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"strings"
     7  
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors"
    10  )
    11  
    12  // RawContractMessage defines a json message that is sent or returned by a wasm contract.
    13  // This type can hold any type of bytes. Until validateBasic is called there should not be
    14  // any assumptions made that the data is valid syntax or semantic.
    15  type RawContractMessage []byte
    16  
    17  func (r RawContractMessage) MarshalJSON() ([]byte, error) {
    18  	return json.RawMessage(r).MarshalJSON()
    19  }
    20  
    21  func (r *RawContractMessage) UnmarshalJSON(b []byte) error {
    22  	if r == nil {
    23  		return errors.New("unmarshalJSON on nil pointer")
    24  	}
    25  	*r = append((*r)[0:0], b...)
    26  	return nil
    27  }
    28  
    29  func (r *RawContractMessage) ValidateBasic() error {
    30  	if r == nil {
    31  		return ErrEmpty
    32  	}
    33  	if !json.Valid(*r) {
    34  		return ErrInvalid
    35  	}
    36  	return nil
    37  }
    38  
    39  // Bytes returns raw bytes type
    40  func (r RawContractMessage) Bytes() []byte {
    41  	return r
    42  }
    43  
    44  func (msg MsgStoreCode) Route() string {
    45  	return RouterKey
    46  }
    47  
    48  func (msg MsgStoreCode) Type() string {
    49  	return "store-code"
    50  }
    51  
    52  func (msg MsgStoreCode) ValidateBasic() error {
    53  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
    54  		return err
    55  	}
    56  
    57  	if err := validateWasmCode(msg.WASMByteCode); err != nil {
    58  		return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "code bytes %s", err.Error())
    59  	}
    60  
    61  	if msg.InstantiatePermission != nil {
    62  		if err := msg.InstantiatePermission.ValidateBasic(); err != nil {
    63  			return sdkerrors.Wrap(err, "instantiate permission")
    64  		}
    65  	}
    66  	return nil
    67  }
    68  
    69  func (msg MsgStoreCode) GetSignBytes() []byte {
    70  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
    71  }
    72  
    73  func (msg MsgStoreCode) GetSigners() []sdk.AccAddress {
    74  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
    75  	if err != nil { // should never happen as valid basic rejects invalid addresses
    76  		panic(err.Error())
    77  	}
    78  	return []sdk.AccAddress{senderAddr}
    79  }
    80  
    81  func (msg MsgInstantiateContract) Route() string {
    82  	return RouterKey
    83  }
    84  
    85  func (msg MsgInstantiateContract) Type() string {
    86  	return "instantiate"
    87  }
    88  
    89  func (msg MsgInstantiateContract) ValidateBasic() error {
    90  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
    91  		return sdkerrors.Wrap(err, "sender")
    92  	}
    93  
    94  	if msg.CodeID == 0 {
    95  		return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "code id is required")
    96  	}
    97  
    98  	if err := validateLabel(msg.Label); err != nil {
    99  		return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "label is required")
   100  	}
   101  
   102  	if !msg.Funds.IsValid() {
   103  		return sdkerrors.ErrInvalidCoins
   104  	}
   105  
   106  	if len(msg.Admin) != 0 {
   107  		if _, err := sdk.AccAddressFromBech32(msg.Admin); err != nil {
   108  			return sdkerrors.Wrap(err, "admin")
   109  		}
   110  	}
   111  	if err := msg.Msg.ValidateBasic(); err != nil {
   112  		return sdkerrors.Wrap(err, "payload msg")
   113  	}
   114  	return nil
   115  }
   116  
   117  func (msg MsgInstantiateContract) GetSignBytes() []byte {
   118  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   119  }
   120  
   121  func (msg MsgInstantiateContract) GetSigners() []sdk.AccAddress {
   122  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
   123  	if err != nil { // should never happen as valid basic rejects invalid addresses
   124  		panic(err.Error())
   125  	}
   126  	return []sdk.AccAddress{senderAddr}
   127  }
   128  
   129  func (msg MsgExecuteContract) Route() string {
   130  	return RouterKey
   131  }
   132  
   133  func (msg MsgExecuteContract) Type() string {
   134  	return "execute"
   135  }
   136  
   137  func (msg MsgExecuteContract) ValidateBasic() error {
   138  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
   139  		return sdkerrors.Wrap(err, "sender")
   140  	}
   141  	if _, err := sdk.AccAddressFromBech32(msg.Contract); err != nil {
   142  		return sdkerrors.Wrap(err, "contract")
   143  	}
   144  
   145  	if !msg.Funds.IsValid() {
   146  		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "sentFunds")
   147  	}
   148  	if err := msg.Msg.ValidateBasic(); err != nil {
   149  		return sdkerrors.Wrap(err, "payload msg")
   150  	}
   151  	return nil
   152  }
   153  
   154  func (msg MsgExecuteContract) GetSignBytes() []byte {
   155  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   156  }
   157  
   158  func (msg MsgExecuteContract) GetSigners() []sdk.AccAddress {
   159  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
   160  	if err != nil { // should never happen as valid basic rejects invalid addresses
   161  		panic(err.Error())
   162  	}
   163  	return []sdk.AccAddress{senderAddr}
   164  }
   165  
   166  func (msg MsgMigrateContract) Route() string {
   167  	return RouterKey
   168  }
   169  
   170  func (msg MsgMigrateContract) Type() string {
   171  	return "migrate"
   172  }
   173  
   174  func (msg MsgMigrateContract) ValidateBasic() error {
   175  	if msg.CodeID == 0 {
   176  		return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "code id is required")
   177  	}
   178  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
   179  		return sdkerrors.Wrap(err, "sender")
   180  	}
   181  	if _, err := sdk.AccAddressFromBech32(msg.Contract); err != nil {
   182  		return sdkerrors.Wrap(err, "contract")
   183  	}
   184  
   185  	if err := msg.Msg.ValidateBasic(); err != nil {
   186  		return sdkerrors.Wrap(err, "payload msg")
   187  	}
   188  
   189  	return nil
   190  }
   191  
   192  func (msg MsgMigrateContract) GetSignBytes() []byte {
   193  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   194  }
   195  
   196  func (msg MsgMigrateContract) GetSigners() []sdk.AccAddress {
   197  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
   198  	if err != nil { // should never happen as valid basic rejects invalid addresses
   199  		panic(err.Error())
   200  	}
   201  	return []sdk.AccAddress{senderAddr}
   202  }
   203  
   204  func (msg MsgUpdateAdmin) Route() string {
   205  	return RouterKey
   206  }
   207  
   208  func (msg MsgUpdateAdmin) Type() string {
   209  	return "update-contract-admin"
   210  }
   211  
   212  func (msg MsgUpdateAdmin) ValidateBasic() error {
   213  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
   214  		return sdkerrors.Wrap(err, "sender")
   215  	}
   216  	if _, err := sdk.AccAddressFromBech32(msg.Contract); err != nil {
   217  		return sdkerrors.Wrap(err, "contract")
   218  	}
   219  	if _, err := sdk.AccAddressFromBech32(msg.NewAdmin); err != nil {
   220  		return sdkerrors.Wrap(err, "new admin")
   221  	}
   222  	if strings.EqualFold(msg.Sender, msg.NewAdmin) {
   223  		return sdkerrors.Wrap(ErrInvalidMsg, "new admin is the same as the sender")
   224  	}
   225  	return nil
   226  }
   227  
   228  func (msg MsgUpdateAdmin) GetSignBytes() []byte {
   229  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   230  }
   231  
   232  func (msg MsgUpdateAdmin) GetSigners() []sdk.AccAddress {
   233  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
   234  	if err != nil { // should never happen as valid basic rejects invalid addresses
   235  		panic(err.Error())
   236  	}
   237  	return []sdk.AccAddress{senderAddr}
   238  }
   239  
   240  func (msg MsgClearAdmin) Route() string {
   241  	return RouterKey
   242  }
   243  
   244  func (msg MsgClearAdmin) Type() string {
   245  	return "clear-contract-admin"
   246  }
   247  
   248  func (msg MsgClearAdmin) ValidateBasic() error {
   249  	if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
   250  		return sdkerrors.Wrap(err, "sender")
   251  	}
   252  	if _, err := sdk.AccAddressFromBech32(msg.Contract); err != nil {
   253  		return sdkerrors.Wrap(err, "contract")
   254  	}
   255  	return nil
   256  }
   257  
   258  func (msg MsgClearAdmin) GetSignBytes() []byte {
   259  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   260  }
   261  
   262  func (msg MsgClearAdmin) GetSigners() []sdk.AccAddress {
   263  	senderAddr, err := sdk.AccAddressFromBech32(msg.Sender)
   264  	if err != nil { // should never happen as valid basic rejects invalid addresses
   265  		panic(err.Error())
   266  	}
   267  	return []sdk.AccAddress{senderAddr}
   268  }
   269  
   270  func (msg MsgIBCSend) Route() string {
   271  	return RouterKey
   272  }
   273  
   274  func (msg MsgIBCSend) Type() string {
   275  	return "wasm-ibc-send"
   276  }
   277  
   278  func (msg MsgIBCSend) ValidateBasic() error {
   279  	return nil
   280  }
   281  
   282  func (msg MsgIBCSend) GetSignBytes() []byte {
   283  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   284  }
   285  
   286  func (msg MsgIBCSend) GetSigners() []sdk.AccAddress {
   287  	return nil
   288  }
   289  
   290  func (msg MsgIBCCloseChannel) Route() string {
   291  	return RouterKey
   292  }
   293  
   294  func (msg MsgIBCCloseChannel) Type() string {
   295  	return "wasm-ibc-close"
   296  }
   297  
   298  func (msg MsgIBCCloseChannel) ValidateBasic() error {
   299  	return nil
   300  }
   301  
   302  func (msg MsgIBCCloseChannel) GetSignBytes() []byte {
   303  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
   304  }
   305  
   306  func (msg MsgIBCCloseChannel) GetSigners() []sdk.AccAddress {
   307  	return nil
   308  }