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 }