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  }