Concepts
Evidence
Any concrete type of evidence submitted to the x/evidence
module must fulfill the Evidence
contract outlined below. Not all concrete types of evidence will fulfill this contract in the same way and some data may be entirely irrelevant to certain types of evidence.
An additional ValidatorEvidence
, which extends Evidence
, has also been created to define a contract for evidence against malicious validators.
Registration & Handling
The x/evidence
module must first know about all types of evidence it is expected to handle. This is accomplished by registering the Route
method in the Evidence
contract with what is known as a Router
(defined below). The Router
accepts Evidence
and attempts to find the corresponding Handler
for the Evidence
via the Route
method.
The Handler
(defined below) is responsible for executing the entirety of the business logic for handling Evidence
. This typically includes validating the evidence, both stateless checks via ValidateBasic
and stateful checks via any keepers provided to the Handler
. In addition, the Handler
may also perform capabilities such as slashing and jailing a validator. All Evidence
handled by the Handler
should be persisted.