diff --git a/protocol/app/ante/sigverify.go b/protocol/app/ante/sigverify.go index e2c89d2beb..aff5a842ed 100644 --- a/protocol/app/ante/sigverify.go +++ b/protocol/app/ante/sigverify.go @@ -97,16 +97,7 @@ func (svd SigVerificationDecorator) AnteHandle( // `GoodTilBlock` for replay protection. if !skipSequenceValidation { if accountpluskeeper.IsTimestampNonce(sig.Sequence) { - err = svd.akp.ProcessTimestampNonce(ctx, acc, sig.Sequence) - - if err == nil { - telemetry.IncrCounterWithLabels( - []string{metrics.TimestampNonce, metrics.Valid, metrics.Count}, - 1, - []gometrics.Label{metrics.GetLabelForIntValue(metrics.ExecMode, int(ctx.ExecMode()))}, - ) - return ctx, nil - } else { + if err := svd.akp.ProcessTimestampNonce(ctx, acc, sig.Sequence); err != nil { telemetry.IncrCounterWithLabels( []string{metrics.TimestampNonce, metrics.Invalid, metrics.Count}, 1, @@ -114,6 +105,11 @@ func (svd SigVerificationDecorator) AnteHandle( ) return ctx, errorsmod.Wrapf(sdkerrors.ErrWrongSequence, err.Error()) } + telemetry.IncrCounterWithLabels( + []string{metrics.TimestampNonce, metrics.Valid, metrics.Count}, + 1, + []gometrics.Label{metrics.GetLabelForIntValue(metrics.ExecMode, int(ctx.ExecMode()))}, + ) } else { if sig.Sequence != acc.GetSequence() { labels := make([]gometrics.Label, 0) diff --git a/protocol/app/ante/sigverify_test.go b/protocol/app/ante/sigverify_test.go index 331da30858..f4d6d4eef5 100644 --- a/protocol/app/ante/sigverify_test.go +++ b/protocol/app/ante/sigverify_test.go @@ -330,6 +330,22 @@ func TestSigVerification(t *testing.T) { "", true, }, + { + "timestamp nonce invalid sigs", + testMsgs, + []cryptotypes.PrivKey{priv1, priv2, priv3}, + []uint64{accs[0].GetAccountNumber(), accs[1].GetAccountNumber(), accs[2].GetAccountNumber()}, + []uint64{ + testante.TestBlockTime + 5000, // ts > min(tsNonces) + testante.TestBlockTime + 5000, + testante.TestBlockTime + 5000, + }, + !validSigs, + false, + true, + "", + true, + }, } for i, tc := range testCases {