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  }