diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index bf2919257840..5be48161ca8f 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -832,6 +832,17 @@ func SimulateMsgRotateConsPubKey(txGen client.TxConfig, ak types.AccountKeeper, return simtypes.NoOpMsg(types.ModuleName, msgType, "unable to build msg"), nil, err } + // check if there's another key rotation for this same key in the same block + allRotations, err := k.GetBlockConsPubKeyRotationHistory(ctx) + if err != nil { + return simtypes.NoOpMsg(types.ModuleName, msgType, "cannot get block cons key rotation history"), nil, err + } + for _, r := range allRotations { + if r.NewConsPubkey.Compare(msg.NewPubkey) == 0 { + return simtypes.NoOpMsg(types.ModuleName, msgType, "cons key already used in this block"), nil, nil + } + } + txCtx := simulation.OperationInput{ R: r, App: app,