github.com/KiraCore/sekai@v0.3.43/x/gov/genesis.go (about)

     1  package gov
     2  
     3  import (
     4  	"bytes"
     5  
     6  	appparams "github.com/KiraCore/sekai/app/params"
     7  	"github.com/KiraCore/sekai/x/gov/keeper"
     8  	"github.com/KiraCore/sekai/x/gov/types"
     9  	sdk "github.com/cosmos/cosmos-sdk/types"
    10  )
    11  
    12  func InitGenesis(
    13  	ctx sdk.Context,
    14  	k keeper.Keeper,
    15  	genesisState types.GenesisState,
    16  ) error {
    17  	k.SetNextRoleId(ctx, genesisState.NextRoleId)
    18  	for _, actor := range genesisState.NetworkActors {
    19  		k.SaveNetworkActor(ctx, *actor)
    20  		for _, role := range actor.Roles {
    21  			k.AssignRoleToActor(ctx, *actor, role)
    22  		}
    23  		for _, perm := range actor.Permissions.Whitelist {
    24  			k.SetWhitelistAddressPermKey(ctx, *actor, types.PermValue(perm))
    25  		}
    26  		// TODO when we add keeper function for managing blacklist mapping, we can just enable this
    27  		// for _, perm := range actor.Permissions.Blacklist {
    28  		// 	k.RemoveWhitelistPermission(ctx, *actor, types.PermValue(perm))
    29  		// }
    30  	}
    31  
    32  	for _, role := range genesisState.Roles {
    33  		k.SetRole(ctx, role)
    34  	}
    35  
    36  	for roleId, perm := range genesisState.RolePermissions {
    37  		for _, white := range perm.Whitelist {
    38  			k.WhitelistRolePermission(ctx, roleId, types.PermValue(white))
    39  		}
    40  		// TODO when we add keeper function for managing blacklist mapping, we can just enable this
    41  		// for _, black := range perm.Blacklist {
    42  		// 	err := k.BlacklistRolePermission(ctx, roleId, types.PermValue(black))
    43  		// 	if err != nil {
    44  		// 		// TODO: this is fine with current upgrade but from next time, it should panic
    45  		// 		fmt.Println("There was an error blacklisting role permission", err)
    46  		// 		// panic(err)
    47  		// 	}
    48  		// }
    49  	}
    50  
    51  	k.SetNextProposalID(ctx, genesisState.StartingProposalId)
    52  	err := k.SetNetworkProperties(ctx, genesisState.NetworkProperties)
    53  	if err != nil {
    54  		panic(err)
    55  	}
    56  
    57  	for _, fee := range genesisState.ExecutionFees {
    58  		k.SetExecutionFee(ctx, fee)
    59  	}
    60  
    61  	k.SavePoorNetworkMessages(ctx, genesisState.PoorNetworkMessages)
    62  
    63  	for _, proposal := range genesisState.Proposals {
    64  		k.SaveProposal(ctx, proposal)
    65  	}
    66  
    67  	for _, vote := range genesisState.Votes {
    68  		k.SaveVote(ctx, vote)
    69  	}
    70  
    71  	for key, entry := range genesisState.DataRegistry {
    72  		if entry == nil {
    73  			continue
    74  		}
    75  		k.UpsertDataRegistryEntry(ctx, key, *entry)
    76  	}
    77  
    78  	for _, record := range genesisState.IdentityRecords {
    79  		k.SetIdentityRecord(ctx, record)
    80  	}
    81  	for _, request := range genesisState.IdRecordsVerifyRequests {
    82  		k.SetIdentityRecordsVerifyRequest(ctx, request)
    83  	}
    84  
    85  	k.SetLastIdentityRecordId(ctx, genesisState.LastIdentityRecordId)
    86  	k.SetLastIdRecordVerifyRequestId(ctx, genesisState.LastIdRecordVerifyRequestId)
    87  
    88  	for typeofProposal, duration := range genesisState.ProposalDurations {
    89  		err := k.SetProposalDuration(ctx, typeofProposal, duration)
    90  		if err != nil {
    91  			return nil
    92  		}
    93  	}
    94  
    95  	return nil
    96  }
    97  
    98  // ExportGenesis writes the current store values
    99  // to a genesis file, which can be imported again
   100  // with InitGenesis
   101  func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (data *types.GenesisState) {
   102  	rolesIterator := k.IterateRoles(ctx)
   103  	defer rolesIterator.Close()
   104  	rolePermissions := make(map[uint64]*types.Permissions)
   105  	for ; rolesIterator.Valid(); rolesIterator.Next() {
   106  		role := sdk.BigEndianToUint64(bytes.TrimPrefix(rolesIterator.Key(), keeper.RolePermissionRegistry))
   107  		perms := k.GetPermissionsFromIterator(rolesIterator)
   108  		rolePermissions[role] = &perms
   109  	}
   110  
   111  	networkActorsIterator := k.GetNetworkActorsIterator(ctx)
   112  	defer networkActorsIterator.Close()
   113  	networkActors := []*types.NetworkActor{}
   114  	for ; networkActorsIterator.Valid(); networkActorsIterator.Next() {
   115  		networkActors = append(networkActors, k.GetNetworkActorFromIterator(networkActorsIterator))
   116  	}
   117  
   118  	proposals, _ := k.GetProposals(ctx)
   119  
   120  	return &types.GenesisState{
   121  		DefaultDenom:                appparams.DefaultDenom,
   122  		Bech32Prefix:                appparams.AccountAddressPrefix,
   123  		StartingProposalId:          k.GetNextProposalID(ctx),
   124  		NextRoleId:                  k.GetNextRoleId(ctx),
   125  		Roles:                       k.GetAllRoles(ctx),
   126  		RolePermissions:             rolePermissions,
   127  		NetworkActors:               networkActors,
   128  		NetworkProperties:           k.GetNetworkProperties(ctx),
   129  		ExecutionFees:               k.GetExecutionFees(ctx),
   130  		PoorNetworkMessages:         k.GetPoorNetworkMessages(ctx),
   131  		Proposals:                   proposals,
   132  		Votes:                       k.GetVotes(ctx),
   133  		DataRegistry:                k.AllDataRegistry(ctx),
   134  		IdentityRecords:             k.GetAllIdentityRecords(ctx),
   135  		LastIdentityRecordId:        k.GetLastIdentityRecordId(ctx),
   136  		IdRecordsVerifyRequests:     k.GetAllIdRecordsVerifyRequests(ctx),
   137  		LastIdRecordVerifyRequestId: k.GetLastIdRecordVerifyRequestId(ctx),
   138  		ProposalDurations:           k.GetAllProposalDurations(ctx),
   139  	}
   140  }