github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/types/msgs.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 "github.com/gogo/protobuf/proto" 7 8 "github.com/Finschia/finschia-sdk/codec/types" 9 sdk "github.com/Finschia/finschia-sdk/types" 10 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 11 "github.com/Finschia/finschia-sdk/x/evidence/exported" 12 ) 13 14 // Message types for the evidence module 15 const ( 16 TypeMsgSubmitEvidence = "submit_evidence" 17 ) 18 19 var ( 20 _ sdk.Msg = &MsgSubmitEvidence{} 21 _ types.UnpackInterfacesMessage = MsgSubmitEvidence{} 22 _ exported.MsgSubmitEvidenceI = &MsgSubmitEvidence{} 23 ) 24 25 // NewMsgSubmitEvidence returns a new MsgSubmitEvidence with a signer/submitter. 26 // 27 //nolint:interfacer 28 func NewMsgSubmitEvidence(s sdk.AccAddress, evi exported.Evidence) (*MsgSubmitEvidence, error) { 29 msg, ok := evi.(proto.Message) 30 if !ok { 31 return nil, fmt.Errorf("cannot proto marshal %T", evi) 32 } 33 any, err := types.NewAnyWithValue(msg) 34 if err != nil { 35 return nil, err 36 } 37 return &MsgSubmitEvidence{Submitter: s.String(), Evidence: any}, nil 38 } 39 40 // Route returns the MsgSubmitEvidence's route. 41 func (m MsgSubmitEvidence) Route() string { return RouterKey } 42 43 // Type returns the MsgSubmitEvidence's type. 44 func (m MsgSubmitEvidence) Type() string { return TypeMsgSubmitEvidence } 45 46 // ValidateBasic performs basic (non-state-dependant) validation on a MsgSubmitEvidence. 47 func (m MsgSubmitEvidence) ValidateBasic() error { 48 if m.Submitter == "" { 49 return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, m.Submitter) 50 } 51 52 evi := m.GetEvidence() 53 if evi == nil { 54 return sdkerrors.Wrap(ErrInvalidEvidence, "missing evidence") 55 } 56 if err := evi.ValidateBasic(); err != nil { 57 return err 58 } 59 60 return nil 61 } 62 63 // GetSignBytes returns the raw bytes a signer is expected to sign when submitting 64 // a MsgSubmitEvidence message. 65 func (m MsgSubmitEvidence) GetSignBytes() []byte { 66 return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) 67 } 68 69 // GetSigners returns the single expected signer for a MsgSubmitEvidence. 70 func (m MsgSubmitEvidence) GetSigners() []sdk.AccAddress { 71 accAddr, err := sdk.AccAddressFromBech32(m.Submitter) 72 if err != nil { 73 return nil 74 } 75 76 return []sdk.AccAddress{accAddr} 77 } 78 79 func (m MsgSubmitEvidence) GetEvidence() exported.Evidence { 80 evi, ok := m.Evidence.GetCachedValue().(exported.Evidence) 81 if !ok { 82 return nil 83 } 84 return evi 85 } 86 87 func (m MsgSubmitEvidence) GetSubmitter() sdk.AccAddress { 88 accAddr, err := sdk.AccAddressFromBech32(m.Submitter) 89 if err != nil { 90 return nil 91 } 92 return accAddr 93 } 94 95 func (m MsgSubmitEvidence) UnpackInterfaces(ctx types.AnyUnpacker) error { 96 var evi exported.Evidence 97 return ctx.UnpackAny(m.Evidence, &evi) 98 }