github.com/cosmos/cosmos-sdk@v0.50.10/x/auth/keeper/genesis.go (about) 1 package keeper 2 3 import ( 4 sdk "github.com/cosmos/cosmos-sdk/types" 5 "github.com/cosmos/cosmos-sdk/x/auth/types" 6 ) 7 8 // InitGenesis - Init store state from genesis data 9 // 10 // CONTRACT: old coins from the FeeCollectionKeeper need to be transferred through 11 // a genesis port script to the new fee collector account 12 func (ak AccountKeeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { 13 if err := ak.Params.Set(ctx, data.Params); err != nil { 14 panic(err) 15 } 16 17 accounts, err := types.UnpackAccounts(data.Accounts) 18 if err != nil { 19 panic(err) 20 } 21 accounts = types.SanitizeGenesisAccounts(accounts) 22 23 // Set the accounts and make sure the global account number matches the largest account number (even if zero). 24 var lastAccNum *uint64 25 for _, acc := range accounts { 26 accNum := acc.GetAccountNumber() 27 for lastAccNum == nil || *lastAccNum < accNum { 28 n := ak.NextAccountNumber(ctx) 29 lastAccNum = &n 30 } 31 ak.SetAccount(ctx, acc) 32 } 33 34 ak.GetModuleAccount(ctx, types.FeeCollectorName) 35 } 36 37 // ExportGenesis returns a GenesisState for a given context and keeper 38 func (ak AccountKeeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { 39 params := ak.GetParams(ctx) 40 41 var genAccounts types.GenesisAccounts 42 ak.IterateAccounts(ctx, func(account sdk.AccountI) bool { 43 genAccount := account.(types.GenesisAccount) 44 genAccounts = append(genAccounts, genAccount) 45 return false 46 }) 47 48 return types.NewGenesisState(params, genAccounts) 49 }