# Messages

# MsgSubmitEvidence

Evidence is submitted through a MsgSubmitEvidence message:

Copy 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:

Copy 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.