168 lines
4.5 KiB
Markdown
168 lines
4.5 KiB
Markdown
# x/evidence
|
|
|
|
The `x/evidence` module is responsible for handling multi-asset coin transfers between
|
|
accounts and tracking special-case pseudo-transfers which must work differently
|
|
with particular kinds of accounts.
|
|
|
|
## Usage
|
|
|
|
1. Import the module.
|
|
|
|
```go
|
|
import (
|
|
"github.com/cosmos/cosmos-sdk/x/evidence"
|
|
evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper"
|
|
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
|
|
)
|
|
```
|
|
|
|
2. Add `AppModuleBasic` to your `ModuleBasics`.
|
|
|
|
```go
|
|
var (
|
|
ModuleBasics = module.NewBasicManager(
|
|
// ...
|
|
evidence.AppModuleBasic{},
|
|
}
|
|
)
|
|
```
|
|
|
|
3. Add the evidence keeper to your apps struct.
|
|
|
|
```go
|
|
type app struct {
|
|
// ...
|
|
EvidenceKeeper evidencekeeper.Keeper
|
|
// ...
|
|
}
|
|
```
|
|
|
|
4. Add the evidence store key to the group of store keys.
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
keys := sdk.NewKVStoreKeys(
|
|
evidencetypes.StoreKey,
|
|
)
|
|
// ...
|
|
}
|
|
```
|
|
|
|
5. Create the keeper. Note, the `x/evidence` module depends on the `x/staking` and `x/slashing` modules. Evidence has expected interfaces, these interfaces are linked to slashing and staking. You can find these interfaces [here](https://github.com/cosmos/cosmos-sdk/blob/v0.41.0/x/evidence/types/expected_keepers.go)
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
// create evidence keeper with router
|
|
evidenceKeeper := evidencekeeper.NewKeeper(
|
|
appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper,
|
|
)
|
|
}
|
|
```
|
|
|
|
6. Add the `x/evidence` module to the app's `ModuleManager`.
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
app.mm = module.NewManager(
|
|
// ...
|
|
evidence.NewAppModule(app.EvidenceKeeper),
|
|
// ...
|
|
)
|
|
}
|
|
```
|
|
|
|
7. Set the `x/evidence` module begin blocker order.
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
app.mm.SetOrderBeginBlockers(
|
|
// ...
|
|
evidencetypes.ModuleName,
|
|
// ...
|
|
)
|
|
}
|
|
```
|
|
|
|
8. Set the `x/evidence` module genesis order.
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
app.mm.SetOrderInitGenesis(..., evidencetypes.ModuleName, ...)
|
|
}
|
|
```
|
|
|
|
9. Add the `x/evidence` module to the simulation manager (if you have one set).
|
|
|
|
```go
|
|
func NewApp(...) *App {
|
|
// ...
|
|
app.sm = module.NewSimulationManager(
|
|
// ...
|
|
evidence.NewAppModule(app.EvidenceKeeper),
|
|
// ...
|
|
)
|
|
}
|
|
|
|
## Genesis
|
|
|
|
The `x/evidence` module defines its genesis state as follows:
|
|
|
|
```proto
|
|
type GenesisState struct {
|
|
// evidence defines all the evidence at genesis.
|
|
Evidence []*types.Any `protobuf:"bytes,1,rep,name=evidence,proto3" json:"evidence,omitempty"`
|
|
}
|
|
```
|
|
|
|
## Messages
|
|
<!-- todo: change to v0.41 when its available -->
|
|
|
|
View supported messages at [docs.cosmos.network/v0.40/modules/evidence](https://docs.cosmos.network/v0.40/modules/evidence/03_messages.html)
|
|
|
|
## Client
|
|
|
|
Evidence supports querying of old evidence and submission of new evidence. There are two queries. One for all the evidence, and one for a specific piece of evidence.
|
|
|
|
### CLI
|
|
|
|
The evidence module supports the blow command to query evidence.
|
|
|
|
```sh
|
|
Usage:
|
|
app query evidence [flags]
|
|
|
|
Flags:
|
|
--count-total count total number of records in evidence to query for
|
|
--height int Use a specific height to query state at (this can error if the node is pruning state)
|
|
-h, --help help for evidence
|
|
--limit uint pagination limit of evidence to query for (default 100)
|
|
--node string <host>:<port> to Tendermint RPC interface for this chain (default "tcp://localhost:26657")
|
|
--offset uint pagination offset of evidence to query for
|
|
-o, --output string Output format (text|json) (default "text")
|
|
--page uint pagination page of evidence to query for. This sets offset to a multiple of limit (default 1)
|
|
--page-key string pagination page-key of evidence to query for
|
|
```
|
|
|
|
### REST
|
|
|
|
Evidence REST API supports only queries of evidence. To submit evidence please use gRPC or the cli.
|
|
|
|
### gRPC
|
|
|
|
Evidence supports both querying and submitting transactions via gRPC
|
|
|
|
#### Query
|
|
|
|
[gRPC query](https://docs.cosmos.network/master/core/proto-docs.html#cosmos/evidence/v1beta1/query.proto)
|
|
|
|
#### Tx
|
|
|
|
[gRPC Tx](https://docs.cosmos.network/master/core/proto-docs.html#cosmos-evidence-v1beta1-tx-proto)
|
|
|
|
View supported messages at [docs.cosmos.network/v0.40/modules/evidence](https://docs.cosmos.network/v0.40/modules/evidence/03_messages.html)
|