43 lines
1.2 KiB
Markdown
43 lines
1.2 KiB
Markdown
# Messages
|
|
|
|
## MsgSubmitEvidence
|
|
|
|
Evidence is submitted through a `MsgSubmitEvidence` message:
|
|
|
|
```go
|
|
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:
|
|
|
|
```go
|
|
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.
|