diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index e2ba458e63..75be49f036 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -140,13 +140,13 @@ func TestDuplicatesMsgCreateValidator(t *testing.T) { assert.Equal(t, types.Description{}, validator.Description) // two validators can't have the same operator address - tstaking.CreateValidator(addr1, pk2, valTokens.Int64(), false) + tstaking.CreateValidator(addr1, pk2, valTokens, false) // two validators can't have the same pubkey - tstaking.CreateValidator(addr2, pk1, valTokens.Int64(), false) + tstaking.CreateValidator(addr2, pk1, valTokens, false) // must have different pubkey and operator - tstaking.CreateValidator(addr2, pk2, valTokens.Int64(), true) + tstaking.CreateValidator(addr2, pk2, valTokens, true) // must end-block updates, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) @@ -175,7 +175,7 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // invalid pukKey type should not be allowed - tstaking.CreateValidator(addr, invalidPk, 10, false) + tstaking.CreateValidator(addr, invalidPk, sdk.NewInt(10), false) } func TestLegacyValidatorDelegations(t *testing.T) { @@ -201,7 +201,7 @@ func TestLegacyValidatorDelegations(t *testing.T) { require.Equal(t, bondAmount, validator.BondedTokens()) // delegate tokens to the validator - tstaking.Delegate(delAddr, valAddr, bondAmount.Int64()) + tstaking.Delegate(delAddr, valAddr, bondAmount) // verify validator bonded shares validator = tstaking.CheckValidator(valAddr, types.Bonded, false) @@ -230,7 +230,7 @@ func TestLegacyValidatorDelegations(t *testing.T) { require.Equal(t, bondAmount, validator.DelegatorShares.RoundInt()) // verify the validator can still self-delegate - tstaking.Delegate(sdk.AccAddress(valAddr), valAddr, bondAmount.Int64()) + tstaking.Delegate(sdk.AccAddress(valAddr), valAddr, bondAmount) // verify validator bonded shares validator, found = app.StakingKeeper.GetValidator(ctx, valAddr) @@ -242,7 +242,7 @@ func TestLegacyValidatorDelegations(t *testing.T) { app.StakingKeeper.Unjail(ctx, valConsAddr) // verify the validator can now accept delegations - tstaking.Delegate(delAddr, valAddr, bondAmount.Int64()) + tstaking.Delegate(delAddr, valAddr, bondAmount) // verify validator bonded shares validator, found = app.StakingKeeper.GetValidator(ctx, valAddr) @@ -283,12 +283,12 @@ func TestIncrementsMsgDelegate(t *testing.T) { require.Equal(t, bondAmount, bond.Shares.RoundInt()) bondedTokens := app.StakingKeeper.TotalBondedTokens(ctx) - require.Equal(t, bondAmount.Int64(), bondedTokens.Int64()) + require.Equal(t, bondAmount, bondedTokens) for i := int64(0); i < 5; i++ { ctx = ctx.WithBlockHeight(i) tstaking.Ctx = ctx - tstaking.Delegate(delegatorAddr, validatorAddr, bondAmount.Int64()) + tstaking.Delegate(delegatorAddr, validatorAddr, bondAmount) //Check that the accounts and the bond account have the appropriate values validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddr) @@ -325,7 +325,7 @@ func TestEditValidatorDecreaseMinSelfDelegation(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator - msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond.Int64()) + msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond) msgCreateValidator.MinSelfDelegation = sdk.NewInt(2) tstaking.Handle(msgCreateValidator, true) @@ -356,7 +356,7 @@ func TestEditValidatorIncreaseMinSelfDelegationBeyondCurrentBond(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator - msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond.Int64()) + msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond) msgCreateValidator.MinSelfDelegation = sdk.NewInt(2) tstaking.Handle(msgCreateValidator, true) @@ -393,7 +393,7 @@ func TestIncrementsMsgUnbond(t *testing.T) { // initial balance amt1 := app.BankKeeper.GetBalance(ctx, delegatorAddr, denom).Amount - tstaking.Delegate(delegatorAddr, validatorAddr, initBond.Int64()) + tstaking.Delegate(delegatorAddr, validatorAddr, initBond) // balance should have been subtracted after delegation amt2 := app.BankKeeper.GetBalance(ctx, delegatorAddr, denom).Amount @@ -438,13 +438,13 @@ func TestIncrementsMsgUnbond(t *testing.T) { gotDelegatorShares := validator.DelegatorShares.RoundInt() gotDelegatorAcc := app.BankKeeper.GetBalance(ctx, delegatorAddr, params.BondDenom).Amount - require.Equal(t, expBond.Int64(), gotBond.Int64(), + require.Equal(t, expBond, gotBond, "i: %v\nexpBond: %v\ngotBond: %v\nvalidator: %v\nbond: %v\n", i, expBond, gotBond, validator, bond) - require.Equal(t, expDelegatorShares.Int64(), gotDelegatorShares.Int64(), + require.Equal(t, expDelegatorShares, gotDelegatorShares, "i: %v\nexpDelegatorShares: %v\ngotDelegatorShares: %v\nvalidator: %v\nbond: %v\n", i, expDelegatorShares, gotDelegatorShares, validator, bond) - require.Equal(t, expDelegatorAcc.Int64(), gotDelegatorAcc.Int64(), + require.Equal(t, expDelegatorAcc, gotDelegatorAcc, "i: %v\nexpDelegatorAcc: %v\ngotDelegatorAcc: %v\nvalidator: %v\nbond: %v\n", i, expDelegatorAcc, gotDelegatorAcc, validator, bond) } @@ -491,7 +491,7 @@ func TestMultipleMsgCreateValidator(t *testing.T) { // bond them all amt := sdk.TokensFromConsensusPower(10) for i, validatorAddr := range validatorAddrs { - tstaking.CreateValidator(validatorAddr, PKs[i], amt.Int64(), true) + tstaking.CreateValidator(validatorAddr, PKs[i], amt, true) // verify that the account is bonded validators := app.StakingKeeper.GetValidators(ctx, 100) require.Equal(t, (i + 1), len(validators)) @@ -545,11 +545,11 @@ func TestMultipleMsgDelegate(t *testing.T) { var amount int64 = 10 // first make a validator - tstaking.CreateValidator(validatorAddr, PKs[0], amount, true) + tstaking.CreateValidator(validatorAddr, PKs[0], sdk.NewInt(amount), true) // delegate multiple parties for _, delegatorAddr := range delegatorAddrs { - tstaking.Delegate(delegatorAddr, validatorAddr, 10) + tstaking.Delegate(delegatorAddr, validatorAddr, sdk.NewInt(10)) tstaking.CheckDelegator(delegatorAddr, validatorAddr, true) } @@ -579,8 +579,8 @@ func TestJailValidator(t *testing.T) { var amt int64 = 10 // create the validator and delegate - tstaking.CreateValidator(validatorAddr, PKs[0], amt, true) - tstaking.Delegate(delegatorAddr, validatorAddr, amt) + tstaking.CreateValidator(validatorAddr, PKs[0], sdk.NewInt(amt), true) + tstaking.Delegate(delegatorAddr, validatorAddr, sdk.NewInt(amt)) // unbond the validators bond portion unamt := sdk.NewInt(amt) @@ -607,7 +607,7 @@ func TestJailValidator(t *testing.T) { tstaking.Ctx = ctx // verify that the pubkey can now be reused - tstaking.CreateValidator(validatorAddr, PKs[0], amt, true) + tstaking.CreateValidator(validatorAddr, PKs[0], sdk.NewInt(amt), true) } func TestValidatorQueue(t *testing.T) { @@ -623,7 +623,7 @@ func TestValidatorQueue(t *testing.T) { // create the validator and make a bond amt := tstaking.CreateValidatorWithValPower(validatorAddr, PKs[0], 10, true) - tstaking.Delegate(delegatorAddr, validatorAddr, amt.Int64()) + tstaking.Delegate(delegatorAddr, validatorAddr, amt) staking.EndBlocker(ctx, app.StakingKeeper) // unbond the all self-delegation to put validator in unbonding state @@ -703,8 +703,8 @@ func TestUnbondingFromUnbondingValidator(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create the validator and delegate - tstaking.CreateValidator(validatorAddr, PKs[0], 10, true) - tstaking.Delegate(delegatorAddr, validatorAddr, 10) + tstaking.CreateValidator(validatorAddr, PKs[0], sdk.NewInt(10), true) + tstaking.Delegate(delegatorAddr, validatorAddr, sdk.NewInt(10)) // unbond the validators bond portion unbondAmt := sdk.NewInt(10) @@ -744,13 +744,13 @@ func TestRedelegationPeriod(t *testing.T) { amt1 := app.BankKeeper.GetBalance(ctx, sdk.AccAddress(validatorAddr), denom).Amount // create the validators - tstaking.CreateValidator(validatorAddr, PKs[0], 10, true) + tstaking.CreateValidator(validatorAddr, PKs[0], sdk.NewInt(10), true) // balance should have been subtracted after creation amt2 := app.BankKeeper.GetBalance(ctx, sdk.AccAddress(validatorAddr), denom).Amount - require.Equal(t, amt1.Sub(sdk.NewInt(10)).Int64(), amt2.Int64(), "expected coins to be subtracted") + require.Equal(t, amt1.Sub(sdk.NewInt(10)), amt2, "expected coins to be subtracted") - tstaking.CreateValidator(validatorAddr2, PKs[1], 10, true) + tstaking.CreateValidator(validatorAddr2, PKs[1], sdk.NewInt(10), true) bal1 := app.BankKeeper.GetAllBalances(ctx, sdk.AccAddress(validatorAddr)) // begin redelegate @@ -790,9 +790,9 @@ func TestTransitiveRedelegation(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create the validators - tstaking.CreateValidator(val1, PKs[0], 10, true) - tstaking.CreateValidator(val2, PKs[1], 10, true) - tstaking.CreateValidator(val3, PKs[2], 10, true) + tstaking.CreateValidator(val1, PKs[0], sdk.NewInt(10), true) + tstaking.CreateValidator(val2, PKs[1], sdk.NewInt(10), true) + tstaking.CreateValidator(val3, PKs[2], sdk.NewInt(10), true) // begin redelegate redAmt := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(10)) @@ -828,7 +828,7 @@ func TestMultipleRedelegationAtSameTime(t *testing.T) { // create the validators valTokens := tstaking.CreateValidatorWithValPower(valAddr, PKs[0], 10, true) - tstaking.CreateValidator(valAddr2, PKs[1], valTokens.Int64(), true) + tstaking.CreateValidator(valAddr2, PKs[1], valTokens, true) // end block to bond them staking.EndBlocker(ctx, app.StakingKeeper) @@ -872,7 +872,7 @@ func TestMultipleRedelegationAtUniqueTimes(t *testing.T) { // create the validators valTokens := tstaking.CreateValidatorWithValPower(valAddr, PKs[0], 10, true) - tstaking.CreateValidator(valAddr2, PKs[1], valTokens.Int64(), true) + tstaking.CreateValidator(valAddr2, PKs[1], valTokens, true) // end block to bond them staking.EndBlocker(ctx, app.StakingKeeper) @@ -1041,10 +1041,10 @@ func TestBondUnbondRedelegateSlashTwice(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) valTokens := tstaking.CreateValidatorWithValPower(valA, PKs[0], 10, true) - tstaking.CreateValidator(valB, PKs[1], valTokens.Int64(), true) + tstaking.CreateValidator(valB, PKs[1], valTokens, true) // delegate 10 stake - tstaking.Delegate(del, valA, valTokens.Int64()) + tstaking.Delegate(del, valA, valTokens) // apply Tendermint updates updates, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 472a96c485..0d00e7fbc5 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -209,14 +209,16 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ return nil, err } - defer func() { - telemetry.IncrCounter(1, types.ModuleName, "delegate") - telemetry.SetGaugeWithLabels( - []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), - []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, - ) - }() + if msg.Amount.Amount.IsInt64() { + defer func() { + telemetry.IncrCounter(1, types.ModuleName, "delegate") + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", msg.Type()}, + float32(msg.Amount.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, + ) + }() + } ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( @@ -325,14 +327,16 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) ( return nil, err } - defer func() { - telemetry.IncrCounter(1, types.ModuleName, "undelegate") - telemetry.SetGaugeWithLabels( - []string{"tx", "msg", msg.Type()}, - float32(msg.Amount.Amount.Int64()), - []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, - ) - }() + if msg.Amount.Amount.IsInt64() { + defer func() { + telemetry.IncrCounter(1, types.ModuleName, "undelegate") + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", msg.Type()}, + float32(msg.Amount.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)}, + ) + }() + } ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( diff --git a/x/staking/teststaking/helper.go b/x/staking/teststaking/helper.go index c0ba45bb1a..e5e770f239 100644 --- a/x/staking/teststaking/helper.go +++ b/x/staking/teststaking/helper.go @@ -32,8 +32,8 @@ func NewHelper(t *testing.T, ctx sdk.Context, k keeper.Keeper) *Helper { } // CreateValidator calls handler to create a new staking validator -func (sh *Helper) CreateValidator(addr sdk.ValAddress, pk crypto.PubKey, stakeAmount int64, ok bool) { - coin := sdk.NewCoin(sh.Denom, sdk.NewInt(stakeAmount)) +func (sh *Helper) CreateValidator(addr sdk.ValAddress, pk crypto.PubKey, stakeAmount sdk.Int, ok bool) { + coin := sdk.NewCoin(sh.Denom, stakeAmount) sh.createValidator(addr, pk, coin, ok) } @@ -47,8 +47,8 @@ func (sh *Helper) CreateValidatorWithValPower(addr sdk.ValAddress, pk crypto.Pub } // CreateValidatorMsg returns a message used to create validator in this service. -func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk crypto.PubKey, stakeAmount int64) *stakingtypes.MsgCreateValidator { - coin := sdk.NewCoin(sh.Denom, sdk.NewInt(stakeAmount)) +func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk crypto.PubKey, stakeAmount sdk.Int) *stakingtypes.MsgCreateValidator { + coin := sdk.NewCoin(sh.Denom, stakeAmount) msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt()) require.NoError(sh.t, err) return msg @@ -61,8 +61,8 @@ func (sh *Helper) createValidator(addr sdk.ValAddress, pk crypto.PubKey, coin sd } // Delegate calls handler to delegate stake for a validator -func (sh *Helper) Delegate(delegator sdk.AccAddress, val sdk.ValAddress, amount int64) { - coin := sdk.NewCoin(sh.Denom, sdk.NewInt(amount)) +func (sh *Helper) Delegate(delegator sdk.AccAddress, val sdk.ValAddress, amount sdk.Int) { + coin := sdk.NewCoin(sh.Denom, amount) msg := stakingtypes.NewMsgDelegate(delegator, val, coin) sh.Handle(msg, true) }