cosmos-sdk/x/evidence/spec/03_messages.md

1.2 KiB

Messages

MsgSubmitEvidence

Evidence is submitted through a MsgSubmitEvidence message:

type MsgSubmitEvidence struct {
  Evidence  Evidence
  Submitter AccAddress
}

Note, the Evidence of a MsgSubmitEvidence message must have a corresponding Handler registered with the x/evidence module's Router in order to be processed and routed correctly.

Given the Evidence is registered with a corresponding Handler, it is processed as follows:

func SubmitEvidence(ctx Context, evidence Evidence) error {
  if _, ok := GetEvidence(ctx, evidence.Hash()); ok {
    return ErrEvidenceExists(codespace, evidence.Hash().String())
  }
  if !router.HasRoute(evidence.Route()) {
    return ErrNoEvidenceHandlerExists(codespace, evidence.Route())
  }

  handler := router.GetRoute(evidence.Route())
  if err := handler(ctx, evidence); err != nil {
    return ErrInvalidEvidence(codespace, err.Error())
  }

  SetEvidence(ctx, evidence)
  return nil
}

First, there must not already exist valid submitted Evidence of the exact same type. Secondly, the Evidence is routed to the Handler and executed. Finally, if there is no error in handling the Evidence, it is persisted to state.