github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/spec/03_messages.md (about)

     1  <!--
     2  order: 3
     3  -->
     4  
     5  # Messages
     6  
     7  ## MsgSubmitEvidence
     8  
     9  Evidence is submitted through a `MsgSubmitEvidence` message:
    10  
    11  ```protobuf
    12  // MsgSubmitEvidence represents a message that supports submitting arbitrary
    13  // Evidence of misbehavior such as equivocation or counterfactual signing.
    14  message MsgSubmitEvidence {
    15    string              submitter = 1;
    16    google.protobuf.Any evidence  = 2;
    17  }
    18  ```
    19  
    20  Note, the `Evidence` of a `MsgSubmitEvidence` message must have a corresponding
    21  `Handler` registered with the `x/evidence` module's `Router` in order to be processed
    22  and routed correctly.
    23  
    24  Given the `Evidence` is registered with a corresponding `Handler`, it is processed
    25  as follows:
    26  
    27  ```go
    28  func SubmitEvidence(ctx Context, evidence Evidence) error {
    29    if _, ok := GetEvidence(ctx, evidence.Hash()); ok {
    30      return sdkerrors.Wrap(types.ErrEvidenceExists, evidence.Hash().String())
    31    }
    32    if !router.HasRoute(evidence.Route()) {
    33      return sdkerrors.Wrap(types.ErrNoEvidenceHandlerExists, evidence.Route())
    34    }
    35  
    36    handler := router.GetRoute(evidence.Route())
    37    if err := handler(ctx, evidence); err != nil {
    38      return sdkerrors.Wrap(types.ErrInvalidEvidence, err.Error())
    39    }
    40  
    41    ctx.EventManager().EmitEvent(
    42  		sdk.NewEvent(
    43  			types.EventTypeSubmitEvidence,
    44  			sdk.NewAttribute(types.AttributeKeyEvidenceHash, evidence.Hash().String()),
    45  		),
    46  	)
    47  
    48    SetEvidence(ctx, evidence)
    49    return nil
    50  }
    51  ```
    52  
    53  First, there must not already exist valid submitted `Evidence` of the exact same
    54  type. Secondly, the `Evidence` is routed to the `Handler` and executed. Finally,
    55  if there is no error in handling the `Evidence`, an event is emitted and it is persisted to state.