54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package evidence
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"cosmossdk.io/x/evidence/exported"
|
|
"cosmossdk.io/x/evidence/keeper"
|
|
"cosmossdk.io/x/evidence/types"
|
|
|
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
)
|
|
|
|
// InitGenesis initializes the evidence module's state from a provided genesis
|
|
// state.
|
|
func InitGenesis(ctx context.Context, k keeper.Keeper, gs *types.GenesisState) error {
|
|
if err := gs.Validate(); err != nil {
|
|
return fmt.Errorf("failed to validate %s genesis state: %w", types.ModuleName, err)
|
|
}
|
|
|
|
for _, e := range gs.Evidence {
|
|
evi, ok := e.GetCachedValue().(exported.Evidence)
|
|
if !ok {
|
|
return errors.New("expected evidence")
|
|
}
|
|
if _, err := k.Evidences.Get(ctx, evi.Hash()); err == nil {
|
|
return fmt.Errorf("evidence with hash %s already exists", evi.Hash())
|
|
}
|
|
|
|
if err := k.Evidences.Set(ctx, evi.Hash(), evi); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ExportGenesis returns the evidence module's exported genesis.
|
|
func ExportGenesis(ctx context.Context, k keeper.Keeper) (*types.GenesisState, error) {
|
|
gs := new(types.GenesisState)
|
|
err := k.Evidences.Walk(ctx, nil, func(_ []byte, value exported.Evidence) (stop bool, err error) {
|
|
anyEvi, err := codectypes.NewAnyWithValue(value)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
gs.Evidence = append(gs.Evidence, anyEvi)
|
|
return false, nil
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return gs, nil
|
|
}
|