Disable telemetry.SetGaugeWithLabels when amount overflow int64 && Update CreateValidator, CreateValidatorMsg, Delegate helper functions to fix int64 overflow

This commit is contained in:
antstalepresh 2020-11-10 23:05:15 +10:00
parent ebb7698339
commit 7bc08c419c
3 changed files with 60 additions and 56 deletions

View File

@ -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)

View File

@ -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(

View File

@ -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)
}