diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ece4ef04cab..7d0a213f7e4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,18 @@ Ref: https://keepachangelog.com/en/1.0.0/ # Changelog +<<<<<<< HEAD ## Unreleased +======= +## [Unreleased] + +* [\#9428](https://github.com/cosmos/cosmos-sdk/pull/9428) Optimize bank InitGenesis. Removed bank keeper's `k.setBalances` and `k.clearBalances`. Added `k.initBalances`. +* [\#9231](https://github.com/cosmos/cosmos-sdk/pull/9231) Remove redundant staking errors. +* [\#9205](https://github.com/cosmos/cosmos-sdk/pull/9205) Improve readability in `abci` handleQueryP2P +* [\#9235](https://github.com/cosmos/cosmos-sdk/pull/9235) CreateMembershipProof/CreateNonMembershipProof now returns an error +if input key is empty, or input data contains empty key. +* [\#9314](https://github.com/cosmos/cosmos-sdk/pull/9314) Update Rosetta SDK to upstream's latest release. +>>>>>>> 2ae787548 (fix: Bank module init genesis optimization (#9428)) ### Features diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index d30415c6a285..85ad06b06eb7 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -20,7 +20,11 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { panic(err) } +<<<<<<< HEAD if err := k.SetBalances(ctx, addr, balance.Coins); err != nil { +======= + if err := k.initBalances(ctx, addr, balance.Coins); err != nil { +>>>>>>> 2ae787548 (fix: Bank module init genesis optimization (#9428)) panic(fmt.Errorf("error on setting balances %w", err)) } diff --git a/x/bank/keeper/send.go b/x/bank/keeper/send.go index c1000b7d3025..1b4599eb35a8 100644 --- a/x/bank/keeper/send.go +++ b/x/bank/keeper/send.go @@ -225,6 +225,7 @@ func (k BaseSendKeeper) AddCoins(ctx sdk.Context, addr sdk.AccAddress, amt sdk.C return nil } +<<<<<<< HEAD // ClearBalances removes all balances for a given account by address. func (k BaseSendKeeper) ClearBalances(ctx sdk.Context, addr sdk.AccAddress) { keys := [][]byte{} @@ -252,6 +253,22 @@ func (k BaseSendKeeper) SetBalances(ctx sdk.Context, addr sdk.AccAddress, balanc err := k.SetBalance(ctx, addr, balance) if err != nil { return err +======= +// initBalances sets the balance (multiple coins) for an account by address. +// An error is returned upon failure. +func (k BaseSendKeeper) initBalances(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error { + accountStore := k.getAccountStore(ctx, addr) + for i := range balances { + balance := balances[i] + if !balance.IsValid() { + return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, balance.String()) + } + + // Bank invariants require to not store zero balances. + if !balance.IsZero() { + bz := k.cdc.MustMarshal(&balance) + accountStore.Set([]byte(balance.Denom), bz) +>>>>>>> 2ae787548 (fix: Bank module init genesis optimization (#9428)) } }