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 }