github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/genesis.go (about) 1 package evidence 2 3 import ( 4 "fmt" 5 6 "github.com/gogo/protobuf/proto" 7 8 codectypes "github.com/Finschia/finschia-sdk/codec/types" 9 sdk "github.com/Finschia/finschia-sdk/types" 10 "github.com/Finschia/finschia-sdk/x/evidence/exported" 11 "github.com/Finschia/finschia-sdk/x/evidence/keeper" 12 "github.com/Finschia/finschia-sdk/x/evidence/types" 13 ) 14 15 // InitGenesis initializes the evidence module's state from a provided genesis 16 // state. 17 func InitGenesis(ctx sdk.Context, k keeper.Keeper, gs *types.GenesisState) { 18 if err := gs.Validate(); err != nil { 19 panic(fmt.Sprintf("failed to validate %s genesis state: %s", types.ModuleName, err)) 20 } 21 22 for _, e := range gs.Evidence { 23 evi, ok := e.GetCachedValue().(exported.Evidence) 24 if !ok { 25 panic("expected evidence") 26 } 27 if _, ok := k.GetEvidence(ctx, evi.Hash()); ok { 28 panic(fmt.Sprintf("evidence with hash %s already exists", evi.Hash())) 29 } 30 31 k.SetEvidence(ctx, evi) 32 } 33 } 34 35 // ExportGenesis returns the evidence module's exported genesis. 36 func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { 37 e := k.GetAllEvidence(ctx) 38 evidence := make([]*codectypes.Any, len(e)) 39 for i, evi := range e { 40 msg, ok := evi.(proto.Message) 41 if !ok { 42 panic(fmt.Errorf("cannot proto marshal %T", evi)) 43 } 44 any, err := codectypes.NewAnyWithValue(msg) 45 if err != nil { 46 panic(err) 47 } 48 evidence[i] = any 49 } 50 return &types.GenesisState{ 51 Evidence: evidence, 52 } 53 }