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  }