diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 1a31ffc0f220..df2b0c0818af 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -11,6 +11,7 @@ import ( storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" @@ -428,6 +429,16 @@ func (k BaseKeeper) AddBalance(ctx context.Context, addr sdk.AccAddress, coin sd return err } + // Create account if recipient does not exist. + // + // NOTE: This should ultimately be removed in favor a more flexible approach + // such as delegated fee messages. + accExists := k.ak.HasAccount(ctx, addr) + if !accExists { + defer telemetry.IncrCounter(1, "new", "account") + k.ak.SetAccount(ctx, k.ak.NewAccountWithAddress(ctx, addr)) + } + // emit mint event sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent(