github.com/InjectiveLabs/sdk-go@v1.53.0/chain/insurance/types/msgs.go (about)

     1  package types
     2  
     3  import (
     4  	"cosmossdk.io/errors"
     5  	sdk "github.com/cosmos/cosmos-sdk/types"
     6  	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
     7  
     8  	oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types"
     9  )
    10  
    11  const RouterKey = ModuleName
    12  
    13  var (
    14  	_ sdk.Msg = &MsgCreateInsuranceFund{}
    15  	_ sdk.Msg = &MsgUnderwrite{}
    16  	_ sdk.Msg = &MsgRequestRedemption{}
    17  	_ sdk.Msg = &MsgUpdateParams{}
    18  )
    19  
    20  // Route implements the sdk.Msg interface. It should return the name of the module
    21  func (msg MsgUpdateParams) Route() string { return RouterKey }
    22  
    23  // Type implements the sdk.Msg interface. It should return the action.
    24  func (msg MsgUpdateParams) Type() string { return "updateParams" }
    25  
    26  // ValidateBasic implements the sdk.Msg interface. It runs stateless checks on the message
    27  func (msg MsgUpdateParams) ValidateBasic() error {
    28  	if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil {
    29  		return errors.Wrap(err, "invalid authority address")
    30  	}
    31  
    32  	if err := msg.Params.Validate(); err != nil {
    33  		return err
    34  	}
    35  
    36  	return nil
    37  }
    38  
    39  // GetSignBytes implements the sdk.Msg interface. It encodes the message for signing
    40  func (msg *MsgUpdateParams) GetSignBytes() []byte {
    41  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
    42  }
    43  
    44  // GetSigners implements the sdk.Msg interface. It defines whose signature is required
    45  func (msg MsgUpdateParams) GetSigners() []sdk.AccAddress {
    46  	sender, err := sdk.AccAddressFromBech32(msg.Authority)
    47  	if err != nil {
    48  		panic(err)
    49  	}
    50  	return []sdk.AccAddress{sender}
    51  }
    52  
    53  // Route implements the sdk.Msg interface. It should return the name of the module
    54  func (msg MsgCreateInsuranceFund) Route() string { return RouterKey }
    55  
    56  // Type implements the sdk.Msg interface. It should return the action.
    57  func (msg MsgCreateInsuranceFund) Type() string { return "createInsuranceFund" }
    58  
    59  // ValidateBasic implements the sdk.Msg interface. It runs stateless checks on the message
    60  func (msg MsgCreateInsuranceFund) ValidateBasic() error {
    61  	if msg.Sender == "" {
    62  		return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender)
    63  	}
    64  	if msg.Ticker == "" || len(msg.Ticker) > 40 {
    65  		return errors.Wrapf(ErrInvalidTicker, "ticker should not be empty or exceed 40 characters")
    66  	}
    67  	if msg.QuoteDenom == "" {
    68  		return errors.Wrap(ErrInvalidQuoteDenom, "quote denom should not be empty")
    69  	}
    70  	if msg.OracleBase == "" {
    71  		return errors.Wrap(ErrInvalidOracle, "oracle base should not be empty")
    72  	}
    73  	if msg.OracleQuote == "" {
    74  		return errors.Wrap(ErrInvalidOracle, "oracle quote should not be empty")
    75  	}
    76  	if msg.OracleType == oracletypes.OracleType_Unspecified {
    77  		return errors.Wrap(ErrInvalidOracle, "oracle type should not be unspecified")
    78  	}
    79  	if msg.QuoteDenom != msg.InitialDeposit.Denom {
    80  		return errors.Wrapf(ErrInvalidDepositDenom, "oracle quote denom %s does not match deposit denom %s", msg.QuoteDenom, msg.InitialDeposit.Denom)
    81  	}
    82  
    83  	if msg.OracleType == oracletypes.OracleType_Provider && msg.Expiry != BinaryOptionsExpiryFlag && msg.Expiry != PerpetualExpiryFlag {
    84  		return errors.Wrap(ErrInvalidExpirationTime, "oracle expiration time should be -2 or -1 for OracleType_Provider")
    85  	}
    86  
    87  	if !msg.InitialDeposit.IsValid() {
    88  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.InitialDeposit.String())
    89  	}
    90  	if !msg.InitialDeposit.IsPositive() || msg.InitialDeposit.Amount.GT(MaxUnderwritingAmount) {
    91  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.InitialDeposit.String())
    92  	}
    93  	return nil
    94  }
    95  
    96  // GetSignBytes implements the sdk.Msg interface. It encodes the message for signing
    97  func (msg *MsgCreateInsuranceFund) GetSignBytes() []byte {
    98  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
    99  }
   100  
   101  // GetSigners implements the sdk.Msg interface. It defines whose signature is required
   102  func (msg MsgCreateInsuranceFund) GetSigners() []sdk.AccAddress {
   103  	sender, err := sdk.AccAddressFromBech32(msg.Sender)
   104  	if err != nil {
   105  		panic(err)
   106  	}
   107  	return []sdk.AccAddress{sender}
   108  }
   109  
   110  // Route implements the sdk.Msg interface. It should return the name of the module
   111  func (msg MsgUnderwrite) Route() string { return RouterKey }
   112  
   113  // Type implements the sdk.Msg interface. It should return the action.
   114  func (msg MsgUnderwrite) Type() string { return "underwrite" }
   115  
   116  // ValidateBasic implements the sdk.Msg interface. It runs stateless checks on the message
   117  func (msg MsgUnderwrite) ValidateBasic() error {
   118  	if msg.Sender == "" {
   119  		return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender)
   120  	}
   121  	if msg.MarketId == "" {
   122  		return errors.Wrap(ErrInvalidMarketID, msg.MarketId)
   123  	}
   124  	if !msg.Deposit.IsValid() {
   125  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.Deposit.String())
   126  	}
   127  	if !msg.Deposit.IsPositive() || msg.Deposit.Amount.GT(MaxUnderwritingAmount) {
   128  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.Deposit.String())
   129  	}
   130  	return nil
   131  }
   132  
   133  // GetSignBytes implements the sdk.Msg interface. It encodes the message for signing
   134  func (msg *MsgUnderwrite) GetSignBytes() []byte {
   135  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
   136  }
   137  
   138  // GetSigners implements the sdk.Msg interface. It defines whose signature is required
   139  func (msg MsgUnderwrite) GetSigners() []sdk.AccAddress {
   140  	sender, err := sdk.AccAddressFromBech32(msg.Sender)
   141  	if err != nil {
   142  		panic(err)
   143  	}
   144  	return []sdk.AccAddress{sender}
   145  }
   146  
   147  // Route implements the sdk.Msg interface. It should return the name of the module
   148  func (msg MsgRequestRedemption) Route() string { return RouterKey }
   149  
   150  // Type implements the sdk.Msg interface. It should return the action.
   151  func (msg MsgRequestRedemption) Type() string { return "requestRedemption" }
   152  
   153  // ValidateBasic implements the sdk.Msg interface. It runs stateless checks on the message
   154  func (msg MsgRequestRedemption) ValidateBasic() error {
   155  	if msg.Sender == "" {
   156  		return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender)
   157  	}
   158  	if msg.MarketId == "" {
   159  		return errors.Wrap(ErrInvalidMarketID, msg.MarketId)
   160  	}
   161  
   162  	if !msg.Amount.IsValid() {
   163  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
   164  	}
   165  
   166  	if !msg.Amount.IsPositive() {
   167  		return errors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
   168  	}
   169  	return nil
   170  }
   171  
   172  // GetSignBytes implements the sdk.Msg interface. It encodes the message for signing
   173  func (msg *MsgRequestRedemption) GetSignBytes() []byte {
   174  	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
   175  }
   176  
   177  // GetSigners implements the sdk.Msg interface. It defines whose signature is required
   178  func (msg MsgRequestRedemption) GetSigners() []sdk.AccAddress {
   179  	sender, err := sdk.AccAddressFromBech32(msg.Sender)
   180  	if err != nil {
   181  		panic(err)
   182  	}
   183  	return []sdk.AccAddress{sender}
   184  }