package keeper import ( "context" "fmt" "math" "cosmossdk.io/collections" sdk "git.cw.tr/mukan-network/mukan-sdk/types" "git.cw.tr/mukan-network/mukan-sdk/types/query" "git.cw.tr/mukan-network/mukan-sdk/x/bank/types" ) // InitGenesis initializes the bank module's state from a given genesis state. func (k BaseKeeper) InitGenesis(ctx context.Context, genState *types.GenesisState) { if err := k.SetParams(ctx, genState.Params); err != nil { panic(err) } for _, se := range genState.GetAllSendEnabled() { k.SetSendEnabled(ctx, se.Denom, se.Enabled) } totalSupplyMap := sdk.NewMapCoins(sdk.Coins{}) genState.Balances = types.SanitizeGenesisBalances(genState.Balances) for _, balance := range genState.Balances { addr := balance.GetAddress() bz, err := k.ak.AddressCodec().StringToBytes(addr) if err != nil { panic(err) } for _, coin := range balance.Coins { err := k.Balances.Set(ctx, collections.Join(sdk.AccAddress(bz), coin.Denom), coin.Amount) if err != nil { panic(err) } } totalSupplyMap.Add(balance.Coins...) } totalSupply := totalSupplyMap.ToCoins() if !genState.Supply.Empty() && !genState.Supply.Equal(totalSupply) { panic(fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply)) } for _, supply := range totalSupply { k.setSupply(ctx, supply) } for _, meta := range genState.DenomMetadata { k.SetDenomMetaData(ctx, meta) } } // ExportGenesis returns the bank module's genesis state. func (k BaseKeeper) ExportGenesis(ctx context.Context) *types.GenesisState { totalSupply, _, err := k.GetPaginatedTotalSupply(ctx, &query.PageRequest{Limit: math.MaxUint64}) if err != nil { panic(fmt.Errorf("unable to fetch total supply %w", err)) } rv := types.NewGenesisState( k.GetParams(ctx), k.GetAccountsBalances(ctx), totalSupply, k.GetAllDenomMetaData(ctx), k.GetAllSendEnabledEntries(ctx), ) return rv }