diff --git a/x/poa/keeper/keeper.go b/x/poa/keeper/keeper.go index 5a6af7b..9bec61f 100644 --- a/x/poa/keeper/keeper.go +++ b/x/poa/keeper/keeper.go @@ -192,13 +192,18 @@ func (k Keeper) ExecuteAddValidator(ctx sdk.Context, msg *types.MsgAddValidator) if err != nil { return err } + // Fetch the validator after creation so the event reports the post-create tokens. + newValidator, err := k.sk.GetValidator(ctx, valAddress) + if err != nil { + return err + } ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeAddValidator, sdk.NewAttribute(types.AttributeValidator, accAddress.String()), sdk.NewAttribute(types.AttributeHeight, fmt.Sprintf("%d", ctx.BlockHeight())), - sdk.NewAttribute(types.AttributeStakingTokens, fmt.Sprintf("%d", validator.Tokens)), + sdk.NewAttribute(types.AttributeStakingTokens, fmt.Sprintf("%d", newValidator.Tokens)), sdk.NewAttribute(types.AttributeBankTokens, balance.String()), ), ) diff --git a/x/poa/keeper/keeper_test.go b/x/poa/keeper/keeper_test.go index d2f340e..cc0595b 100644 --- a/x/poa/keeper/keeper_test.go +++ b/x/poa/keeper/keeper_test.go @@ -2,6 +2,7 @@ package keeper import ( "errors" + "fmt" "testing" "cosmossdk.io/math" @@ -311,16 +312,7 @@ func TestKeeper_ExecuteAddValidator(t *testing.T) { name: "should pass - MsgAddValidator", validatorAddress: "ethm1a0pd5cyew47pvgf7rd7axxy3humv9ev0nnkprp", pubKey: msgPubKey, - stakingMocks: func(ctx sdk.Context, stakingKeeper *testutil.MockStakingKeeper) { - stakingKeeper.EXPECT().GetParams(ctx).Return(stakingtypes.Params{ - BondDenom: "BND", - MaxValidators: 2, - }, nil) - stakingKeeper.EXPECT().GetAllValidators(ctx).Return([]stakingtypes.Validator{}, nil) - stakingKeeper.EXPECT().GetValidator(ctx, gomock.Any()).Return(stakingtypes.Validator{Tokens: math.NewInt(0)}, nil) - stakingKeeper.EXPECT().GetAllDelegatorDelegations(ctx, gomock.Any()).Return([]stakingtypes.Delegation{}, nil) - stakingKeeper.EXPECT().GetUnbondingDelegationsFromValidator(ctx, gomock.Any()).Return([]stakingtypes.UnbondingDelegation{}, nil) - }, + stakingMocks: successfulAddValidatorStakingMocks, bankMocks: func(ctx sdk.Context, bankKeeper *testutil.MockBankKeeper) { bankKeeper.EXPECT().GetBalance(ctx, gomock.Any(), gomock.Any()).Return(sdk.Coin{ Denom: "BND", @@ -350,6 +342,7 @@ func TestKeeper_ExecuteAddValidator(t *testing.T) { }, }, nil) stakingKeeper.EXPECT().GetUnbondingDelegationsFromValidator(ctx, gomock.Any()).Return([]stakingtypes.UnbondingDelegation{}, nil) + stakingKeeper.EXPECT().GetValidator(ctx, gomock.Any()).Return(stakingtypes.Validator{Tokens: sdk.DefaultPowerReduction}, nil).Times(1) }, bankMocks: func(ctx sdk.Context, bankKeeper *testutil.MockBankKeeper) { bankKeeper.EXPECT().GetBalance(ctx, gomock.Any(), gomock.Any()).Return(sdk.Coin{ @@ -389,6 +382,47 @@ func TestKeeper_ExecuteAddValidator(t *testing.T) { } } +func TestKeeper_ExecuteAddValidator_EmitsPostCreateStakingTokens(t *testing.T) { + ctrl := gomock.NewController(t) + pubKey := testutil.NewMockPubKey(ctrl) + msgPubKey, _ := types1.NewAnyWithValue(pubKey) + + keeper, ctx := setupPoaKeeper( + t, + successfulAddValidatorStakingMocks, + func(ctx sdk.Context, bankKeeper *testutil.MockBankKeeper) { + bankKeeper.EXPECT().GetBalance(ctx, gomock.Any(), gomock.Any()).Return(sdk.Coin{ + Denom: "BND", + Amount: math.NewInt(0), + }) + bankKeeper.EXPECT().MintCoins(ctx, gomock.Any(), gomock.Any()).Return(nil) + bankKeeper.EXPECT().SendCoinsFromModuleToAccount(ctx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + }, + ) + + msg := &types.MsgAddValidator{ + Authority: keeper.GetAuthority(), + ValidatorAddress: "ethm1a0pd5cyew47pvgf7rd7axxy3humv9ev0nnkprp", + Description: stakingtypes.Description{ + Moniker: "test", + }, + Pubkey: msgPubKey, + } + + err := keeper.ExecuteAddValidator(ctx, msg) + require.NoError(t, err) + + events := ctx.EventManager().Events() + require.NotEmpty(t, events) + + event := events[len(events)-1] + require.Equal(t, types.EventTypeAddValidator, event.Type) + + attribute, ok := event.GetAttribute(types.AttributeStakingTokens) + require.True(t, ok) + require.Equal(t, fmt.Sprintf("%d", sdk.DefaultPowerReduction), attribute.Value) +} + func TestKeeper_ExecuteRemoveValidator(t *testing.T) { ctrl := gomock.NewController(t)