From 7cd0caba7a5800845669bea193d72069eb57b55d Mon Sep 17 00:00:00 2001 From: dauTT <30392990+dauTT@users.noreply.github.com> Date: Tue, 26 May 2020 18:52:23 +0200 Subject: [PATCH] Merge PR #6278: Add msg type sim operations --- types/simulation/types.go | 4 +- x/bank/simulation/operations.go | 12 ++-- x/bank/types/msgs.go | 10 +++- x/distribution/simulation/operations.go | 30 +++++----- x/distribution/types/msg.go | 16 +++-- x/gov/simulation/operations.go | 30 +++++----- x/slashing/simulation/operations.go | 14 ++--- x/slashing/types/msg.go | 7 ++- x/staking/simulation/operations.go | 77 ++++++++++++------------- x/staking/types/msg.go | 19 ++++-- 10 files changed, 122 insertions(+), 97 deletions(-) diff --git a/types/simulation/types.go b/types/simulation/types.go index 0e4a3e6ec6..1ede0c0554 100644 --- a/types/simulation/types.go +++ b/types/simulation/types.go @@ -80,8 +80,8 @@ func NewOperationMsg(msg sdk.Msg, ok bool, comment string) OperationMsg { } // NoOpMsg - create a no-operation message -func NoOpMsg(route string) OperationMsg { - return NewOperationMsgBasic(route, "no-operation", "", false, nil) +func NoOpMsg(route, msgType, comment string) OperationMsg { + return NewOperationMsgBasic(route, msgType, comment, false, nil) } // log entry text for this operation msg diff --git a/x/bank/simulation/operations.go b/x/bank/simulation/operations.go index 5974266acd..a08fae98ec 100644 --- a/x/bank/simulation/operations.go +++ b/x/bank/simulation/operations.go @@ -61,20 +61,20 @@ func SimulateMsgSend(ak types.AccountKeeper, bk keeper.Keeper) simtypes.Operatio ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { if !bk.GetSendEnabled(ctx) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSend, "transfers are not enabled"), nil, nil } simAccount, toSimAcc, coins, skip := randomSendFields(r, ctx, accs, bk, ak) if skip { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSend, "skip all transfers"), nil, nil } msg := types.NewMsgSend(simAccount.Address, toSimAcc.Address, coins) err := sendMsgSend(r, app, bk, ak, msg, ctx, chainID, []crypto.PrivKey{simAccount.PrivKey}) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "invalid transfers"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -131,7 +131,7 @@ func SimulateMsgMultiSend(ak types.AccountKeeper, bk keeper.Keeper) simtypes.Ope ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { if !bk.GetSendEnabled(ctx) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgMultiSend, "transfers are not enabled"), nil, nil } // random number of inputs/outputs between [1, 3] @@ -155,7 +155,7 @@ func SimulateMsgMultiSend(ak types.AccountKeeper, bk keeper.Keeper) simtypes.Ope } if skip { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgMultiSend, "skip all transfers"), nil, nil } // set input address in used address map @@ -205,7 +205,7 @@ func SimulateMsgMultiSend(ak types.AccountKeeper, bk keeper.Keeper) simtypes.Ope err := sendMsgMultiSend(r, app, bk, ak, msg, ctx, chainID, privs) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "invalid transfers"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil diff --git a/x/bank/types/msgs.go b/x/bank/types/msgs.go index f250eb2075..088eebfff1 100644 --- a/x/bank/types/msgs.go +++ b/x/bank/types/msgs.go @@ -5,6 +5,12 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) +// bank message types +const ( + TypeMsgSend = "send" + TypeMsgMultiSend = "multisend" +) + var _ sdk.Msg = MsgSend{} // NewMsgSend - construct arbitrary multi-in, multi-out send msg. @@ -16,7 +22,7 @@ func NewMsgSend(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins) MsgSend { func (msg MsgSend) Route() string { return RouterKey } // Type Implements Msg. -func (msg MsgSend) Type() string { return "send" } +func (msg MsgSend) Type() string { return TypeMsgSend } // ValidateBasic Implements Msg. func (msg MsgSend) ValidateBasic() error { @@ -60,7 +66,7 @@ func NewMsgMultiSend(in []Input, out []Output) MsgMultiSend { func (msg MsgMultiSend) Route() string { return RouterKey } // Type Implements Msg -func (msg MsgMultiSend) Type() string { return "multisend" } +func (msg MsgMultiSend) Type() string { return TypeMsgMultiSend } // ValidateBasic Implements Msg. func (msg MsgMultiSend) ValidateBasic() error { diff --git a/x/distribution/simulation/operations.go b/x/distribution/simulation/operations.go index cd1fbaa020..fb3170e59a 100644 --- a/x/distribution/simulation/operations.go +++ b/x/distribution/simulation/operations.go @@ -84,7 +84,7 @@ func SimulateMsgSetWithdrawAddress(ak types.AccountKeeper, bk types.BankKeeper, r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { if !k.GetWithdrawAddrEnabled(ctx) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetWithdrawAddress, "withdrawal is not enabled"), nil, nil } simAccount, _ := simtypes.RandomAcc(r, accs) @@ -95,7 +95,7 @@ func SimulateMsgSetWithdrawAddress(ak types.AccountKeeper, bk types.BankKeeper, fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSetWithdrawAddress, "unable to generate fees"), nil, err } msg := types.NewMsgSetWithdrawAddress(simAccount.Address, simToAccount.Address) @@ -112,7 +112,7 @@ func SimulateMsgSetWithdrawAddress(ak types.AccountKeeper, bk types.BankKeeper, _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -127,14 +127,14 @@ func SimulateMsgWithdrawDelegatorReward(ak types.AccountKeeper, bk types.BankKee simAccount, _ := simtypes.RandomAcc(r, accs) delegations := sk.GetAllDelegatorDelegations(ctx, simAccount.Address) if len(delegations) == 0 { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawDelegatorReward, "number of delegators equal 0"), nil, nil } delegation := delegations[r.Intn(len(delegations))] validator := sk.Validator(ctx, delegation.GetValidatorAddr()) if validator == nil { - return simtypes.NoOpMsg(types.ModuleName), nil, fmt.Errorf("validator %s not found", delegation.GetValidatorAddr()) + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawDelegatorReward, "validator is nil"), nil, fmt.Errorf("validator %s not found", delegation.GetValidatorAddr()) } account := ak.GetAccount(ctx, simAccount.Address) @@ -142,7 +142,7 @@ func SimulateMsgWithdrawDelegatorReward(ak types.AccountKeeper, bk types.BankKee fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawDelegatorReward, "unable to generate fees"), nil, err } msg := types.NewMsgWithdrawDelegatorReward(simAccount.Address, validator.GetOperator()) @@ -159,7 +159,7 @@ func SimulateMsgWithdrawDelegatorReward(ak types.AccountKeeper, bk types.BankKee _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -174,17 +174,17 @@ func SimulateMsgWithdrawValidatorCommission(ak types.AccountKeeper, bk types.Ban validator, ok := stakingkeeper.RandomValidator(r, sk, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawValidatorCommission, "random validator is not ok"), nil, nil } commission := k.GetValidatorAccumulatedCommission(ctx, validator.GetOperator()) if commission.Commission.IsZero() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawValidatorCommission, "validator commission is zero"), nil, nil } simAccount, found := simtypes.FindAccount(accs, sdk.AccAddress(validator.GetOperator())) if !found { - return simtypes.NoOpMsg(types.ModuleName), nil, fmt.Errorf("validator %s not found", validator.GetOperator()) + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawValidatorCommission, "could not find account"), nil, fmt.Errorf("validator %s not found", validator.GetOperator()) } account := ak.GetAccount(ctx, simAccount.Address) @@ -192,7 +192,7 @@ func SimulateMsgWithdrawValidatorCommission(ak types.AccountKeeper, bk types.Ban fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgWithdrawValidatorCommission, "unable to generate fees"), nil, err } msg := types.NewMsgWithdrawValidatorCommission(validator.GetOperator()) @@ -209,7 +209,7 @@ func SimulateMsgWithdrawValidatorCommission(ak types.AccountKeeper, bk types.Ban _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -230,7 +230,7 @@ func SimulateMsgFundCommunityPool(ak types.AccountKeeper, bk types.BankKeeper, k fundAmount := simtypes.RandSubsetCoins(r, spendable) if fundAmount.Empty() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgFundCommunityPool, "fund amount is empty"), nil, nil } var ( @@ -242,7 +242,7 @@ func SimulateMsgFundCommunityPool(ak types.AccountKeeper, bk types.BankKeeper, k if !hasNeg { fees, err = simtypes.RandomFees(r, ctx, coins) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgFundCommunityPool, "unable to generate fees"), nil, err } } @@ -259,7 +259,7 @@ func SimulateMsgFundCommunityPool(ak types.AccountKeeper, bk types.BankKeeper, k _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil diff --git a/x/distribution/types/msg.go b/x/distribution/types/msg.go index 4641c95663..13e9adde27 100644 --- a/x/distribution/types/msg.go +++ b/x/distribution/types/msg.go @@ -6,6 +6,14 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) +// distribution message types +const ( + TypeMsgSetWithdrawAddress = "set_withdraw_address" + TypeMsgWithdrawDelegatorReward = "withdraw_delegator_reward" + TypeMsgWithdrawValidatorCommission = "withdraw_validator_commission" + TypeMsgFundCommunityPool = "fund_community_pool" +) + // Verify interface at compile time var _, _, _ sdk.Msg = &MsgSetWithdrawAddress{}, &MsgWithdrawDelegatorReward{}, &MsgWithdrawValidatorCommission{} @@ -17,7 +25,7 @@ func NewMsgSetWithdrawAddress(delAddr, withdrawAddr sdk.AccAddress) MsgSetWithdr } func (msg MsgSetWithdrawAddress) Route() string { return ModuleName } -func (msg MsgSetWithdrawAddress) Type() string { return "set_withdraw_address" } +func (msg MsgSetWithdrawAddress) Type() string { return TypeMsgSetWithdrawAddress } // Return address that must sign over msg.GetSignBytes() func (msg MsgSetWithdrawAddress) GetSigners() []sdk.AccAddress { @@ -50,7 +58,7 @@ func NewMsgWithdrawDelegatorReward(delAddr sdk.AccAddress, valAddr sdk.ValAddres } func (msg MsgWithdrawDelegatorReward) Route() string { return ModuleName } -func (msg MsgWithdrawDelegatorReward) Type() string { return "withdraw_delegator_reward" } +func (msg MsgWithdrawDelegatorReward) Type() string { return TypeMsgWithdrawDelegatorReward } // Return address that must sign over msg.GetSignBytes() func (msg MsgWithdrawDelegatorReward) GetSigners() []sdk.AccAddress { @@ -81,7 +89,7 @@ func NewMsgWithdrawValidatorCommission(valAddr sdk.ValAddress) MsgWithdrawValida } func (msg MsgWithdrawValidatorCommission) Route() string { return ModuleName } -func (msg MsgWithdrawValidatorCommission) Type() string { return "withdraw_validator_commission" } +func (msg MsgWithdrawValidatorCommission) Type() string { return TypeMsgWithdrawValidatorCommission } // Return address that must sign over msg.GetSignBytes() func (msg MsgWithdrawValidatorCommission) GetSigners() []sdk.AccAddress { @@ -102,8 +110,6 @@ func (msg MsgWithdrawValidatorCommission) ValidateBasic() error { return nil } -const TypeMsgFundCommunityPool = "fund_community_pool" - // NewMsgFundCommunityPool returns a new MsgFundCommunityPool with a sender and // a funding amount. func NewMsgFundCommunityPool(amount sdk.Coins, depositor sdk.AccAddress) MsgFundCommunityPool { diff --git a/x/gov/simulation/operations.go b/x/gov/simulation/operations.go index 05d47bee7e..80da7c5b0d 100644 --- a/x/gov/simulation/operations.go +++ b/x/gov/simulation/operations.go @@ -113,21 +113,21 @@ func SimulateSubmitProposal( // 1) submit proposal now content := contentSim(r, ctx, accs) if content == nil { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSubmitProposal, "content is nil"), nil, nil } simAccount, _ := simtypes.RandomAcc(r, accs) deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address) switch { case skip: - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSubmitProposal, "skip deposit"), nil, nil case err != nil: - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgSubmitProposal, "unable to generate deposit"), nil, err } msg, err := types.NewMsgSubmitProposal(content, deposit, simAccount.Address) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate a submit proposal msg"), nil, err } account := ak.GetAccount(ctx, simAccount.Address) @@ -138,7 +138,7 @@ func SimulateSubmitProposal( if !hasNeg { fees, err = simtypes.RandomFees(r, ctx, coins) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } } @@ -154,7 +154,7 @@ func SimulateSubmitProposal( _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } opMsg := simtypes.NewOperationMsg(msg, true, "") @@ -162,7 +162,7 @@ func SimulateSubmitProposal( // get the submitted proposal ID proposalID, err := k.GetProposalID(ctx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate proposalID"), nil, err } // 2) Schedule operations for votes @@ -199,15 +199,15 @@ func SimulateMsgDeposit(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Ke simAccount, _ := simtypes.RandomAcc(r, accs) proposalID, ok := randomProposalID(r, k, ctx, types.StatusDepositPeriod) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDeposit, "unable to generate proposalID"), nil, nil } deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address) switch { case skip: - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDeposit, "skip deposit"), nil, nil case err != nil: - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDeposit, "unable to generate deposit"), nil, err } msg := types.NewMsgDeposit(simAccount.Address, proposalID, deposit) @@ -220,7 +220,7 @@ func SimulateMsgDeposit(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Ke if !hasNeg { fees, err = simtypes.RandomFees(r, ctx, coins) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } } @@ -236,7 +236,7 @@ func SimulateMsgDeposit(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Ke _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -265,7 +265,7 @@ func operationSimulateMsgVote(ak types.AccountKeeper, bk types.BankKeeper, k kee var ok bool proposalID, ok = randomProposalID(r, k, ctx, types.StatusVotingPeriod) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgVote, "unable to generate proposalID"), nil, nil } default: proposalID = uint64(proposalIDInt) @@ -279,7 +279,7 @@ func operationSimulateMsgVote(ak types.AccountKeeper, bk types.BankKeeper, k kee fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } tx := helpers.GenTx( @@ -294,7 +294,7 @@ func operationSimulateMsgVote(ak types.AccountKeeper, bk types.BankKeeper, k kee _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil diff --git a/x/slashing/simulation/operations.go b/x/slashing/simulation/operations.go index 112f598ab6..e597913f35 100644 --- a/x/slashing/simulation/operations.go +++ b/x/slashing/simulation/operations.go @@ -52,28 +52,28 @@ func SimulateMsgUnjail(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Kee validator, ok := stakingkeeper.RandomValidator(r, sk, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "validator is not ok"), nil, nil // skip } simAccount, found := simtypes.FindAccount(accs, sdk.AccAddress(validator.GetOperator())) if !found { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "unable to find account"), nil, nil // skip } if !validator.IsJailed() { // TODO: due to this condition this message is almost, if not always, skipped ! - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "validator is not jailed"), nil, nil } consAddr := sdk.ConsAddress(validator.GetConsPubKey().Address()) info, found := k.GetValidatorSigningInfo(ctx, consAddr) if !found { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "unable to find validator signing info"), nil, nil // skip } selfDel := sk.Delegation(ctx, simAccount.Address, validator.GetOperator()) if selfDel == nil { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "self delegation is nil"), nil, nil // skip } account := ak.GetAccount(ctx, sdk.AccAddress(validator.GetOperator())) @@ -81,7 +81,7 @@ func SimulateMsgUnjail(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Kee fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUnjail, "unable to generate fees"), nil, err } msg := types.NewMsgUnjail(validator.GetOperator()) @@ -121,7 +121,7 @@ func SimulateMsgUnjail(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Kee } if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, errors.New(res.Log) + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, errors.New(res.Log) } return simtypes.NewOperationMsg(msg, true, ""), nil, nil diff --git a/x/slashing/types/msg.go b/x/slashing/types/msg.go index 000f695ca2..7b7d1efb64 100644 --- a/x/slashing/types/msg.go +++ b/x/slashing/types/msg.go @@ -4,6 +4,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) +// slashing message types +const ( + TypeMsgUnjail = "unjail" +) + // verify interface at compile time var _ sdk.Msg = &MsgUnjail{} @@ -15,7 +20,7 @@ func NewMsgUnjail(validatorAddr sdk.ValAddress) MsgUnjail { } func (msg MsgUnjail) Route() string { return RouterKey } -func (msg MsgUnjail) Type() string { return "unjail" } +func (msg MsgUnjail) Type() string { return TypeMsgUnjail } func (msg MsgUnjail) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sdk.AccAddress(msg.ValidatorAddr)} } diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index c608ac7f6e..bcdc4ee3f4 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -103,19 +103,19 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k // ensure the validator doesn't exist already _, found := k.GetValidator(ctx, address) if found { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "unable to find validator"), nil, nil } denom := k.GetParams(ctx).BondDenom balance := bk.GetBalance(ctx, simAccount.Address, denom).Amount if !balance.IsPositive() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "balance is negative"), nil, nil } amount, err := simtypes.RandPositiveInt(r, balance) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "unable to generate positive amount"), nil, err } selfDelegation := sdk.NewCoin(denom, amount) @@ -129,7 +129,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k if !hasNeg { fees, err = simtypes.RandomFees(r, ctx, coins) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "unable to generate fees"), nil, err } } @@ -163,7 +163,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -177,12 +177,12 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string, ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { if len(k.GetAllValidators(ctx)) == 0 { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditValidator, "number of validators equal zero"), nil, nil } val, ok := keeper.RandomValidator(r, k, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditValidator, "unable to pick a validator"), nil, nil } address := val.GetOperator() @@ -191,12 +191,12 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee if err := val.Commission.ValidateNewRate(newCommissionRate, ctx.BlockHeader().Time); err != nil { // skip as the commission is invalid - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditValidator, "invalid commission rate"), nil, nil } simAccount, found := simtypes.FindAccount(accs, sdk.AccAddress(val.GetOperator())) if !found { - return simtypes.NoOpMsg(types.ModuleName), nil, fmt.Errorf("validator %s not found", val.GetOperator()) + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditValidator, "unable to find account"), nil, fmt.Errorf("validator %s not found", val.GetOperator()) } account := ak.GetAccount(ctx, simAccount.Address) @@ -204,7 +204,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEditValidator, "unable to generate fees"), nil, err } description := types.NewDescription( @@ -229,7 +229,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -245,28 +245,27 @@ func SimulateMsgDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.K denom := k.GetParams(ctx).BondDenom if len(k.GetAllValidators(ctx)) == 0 { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "number of validators equal zero"), nil, nil } simAccount, _ := simtypes.RandomAcc(r, accs) val, ok := keeper.RandomValidator(r, k, ctx) - if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "unable to pick a validator"), nil, nil } if val.InvalidExRate() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "validator's invalid echange rate"), nil, nil } amount := bk.GetBalance(ctx, simAccount.Address, denom).Amount if !amount.IsPositive() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "balance is negative"), nil, nil } amount, err := simtypes.RandPositiveInt(r, amount) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "unable to generate positive amount"), nil, err } bondAmt := sdk.NewCoin(denom, amount) @@ -280,7 +279,7 @@ func SimulateMsgDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.K if !hasNeg { fees, err = simtypes.RandomFees(r, ctx, coins) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "unable to generate fees"), nil, err } } @@ -298,7 +297,7 @@ func SimulateMsgDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.K _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -314,7 +313,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper // get random validator validator, ok := keeper.RandomValidator(r, k, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "validator is not ok"), nil, nil } valAddr := validator.GetOperator() @@ -325,21 +324,21 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper delAddr := delegation.GetDelegatorAddr() if k.HasMaxUnbondingDelegationEntries(ctx, delAddr, valAddr) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "keeper does have a max unbonding delegation entries"), nil, nil } totalBond := validator.TokensFromShares(delegation.GetShares()).TruncateInt() if !totalBond.IsPositive() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "total bond is negative"), nil, nil } unbondAmt, err := simtypes.RandPositiveInt(r, totalBond) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "invalid unbond amount"), nil, err } if unbondAmt.IsZero() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgUndelegate, "unbond amount is zero"), nil, nil } msg := types.NewMsgUndelegate( @@ -357,7 +356,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper } // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error if simAccount.PrivKey == nil { - return simtypes.NoOpMsg(types.ModuleName), nil, fmt.Errorf("delegation addr: %s does not exist in simulation accounts", delAddr) + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "account private key is nil"), nil, fmt.Errorf("delegation addr: %s does not exist in simulation accounts", delAddr) } account := ak.GetAccount(ctx, delAddr) @@ -365,7 +364,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } tx := helpers.GenTx( @@ -380,7 +379,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil @@ -396,7 +395,7 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k // get random source validator srcVal, ok := keeper.RandomValidator(r, k, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "unable to pick validator"), nil, nil } srcAddr := srcVal.GetOperator() @@ -407,42 +406,42 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k delAddr := delegation.GetDelegatorAddr() if k.HasReceivingRedelegation(ctx, delAddr, srcAddr) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "receveing redelegation is not allowed"), nil, nil // skip } // get random destination validator destVal, ok := keeper.RandomValidator(r, k, ctx) if !ok { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "unable to pick validator"), nil, nil } destAddr := destVal.GetOperator() if srcAddr.Equals(destAddr) || destVal.InvalidExRate() || k.HasMaxRedelegationEntries(ctx, delAddr, srcAddr, destAddr) { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "checks failed"), nil, nil } totalBond := srcVal.TokensFromShares(delegation.GetShares()).TruncateInt() if !totalBond.IsPositive() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "total bond is negative"), nil, nil } redAmt, err := simtypes.RandPositiveInt(r, totalBond) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "unable to generate positive amount"), nil, err } if redAmt.IsZero() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "amount is zero"), nil, nil } // check if the shares truncate to zero shares, err := srcVal.SharesFromTokens(redAmt) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "invalid shares"), nil, err } if srcVal.TokensFromShares(shares).TruncateInt().IsZero() { - return simtypes.NoOpMsg(types.ModuleName), nil, nil // skip + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "shares truncate to zero"), nil, nil // skip } // need to retrieve the simulation account associated with delegation to retrieve PrivKey @@ -457,7 +456,7 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error if simAccount.PrivKey == nil { - return simtypes.NoOpMsg(types.ModuleName), nil, fmt.Errorf("delegation addr: %s does not exist in simulation accounts", delAddr) + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "account private key is nil"), nil, fmt.Errorf("delegation addr: %s does not exist in simulation accounts", delAddr) } account := ak.GetAccount(ctx, delAddr) @@ -465,7 +464,7 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k fees, err := simtypes.RandomFees(r, ctx, spendable) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgBeginRedelegate, "unable to generate fees"), nil, err } msg := types.NewMsgBeginRedelegate( @@ -485,7 +484,7 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k _, _, err = app.Deliver(tx) if err != nil { - return simtypes.NoOpMsg(types.ModuleName), nil, err + return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } return simtypes.NewOperationMsg(msg, true, ""), nil, nil diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index 10ad750560..4afc2e9ed5 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -9,6 +9,15 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) +// staking message types +const ( + TypeMsgUndelegate = "begin_unbonding" + TypeMsgEditValidator = "edit_validator" + TypeMsgCreateValidator = "create_validator" + TypeMsgDelegate = "delegate" + TypeMsgBeginRedelegate = "begin_redelegate" +) + var ( _ sdk.Msg = &MsgCreateValidator{} _ sdk.Msg = &MsgEditValidator{} @@ -43,7 +52,7 @@ func NewMsgCreateValidator( func (msg MsgCreateValidator) Route() string { return RouterKey } // Type implements the sdk.Msg interface. -func (msg MsgCreateValidator) Type() string { return "create_validator" } +func (msg MsgCreateValidator) Type() string { return TypeMsgCreateValidator } // GetSigners implements the sdk.Msg interface. It returns the address(es) that // must sign over msg.GetSignBytes(). @@ -126,7 +135,7 @@ func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRat func (msg MsgEditValidator) Route() string { return RouterKey } // Type implements the sdk.Msg interface. -func (msg MsgEditValidator) Type() string { return "edit_validator" } +func (msg MsgEditValidator) Type() string { return TypeMsgEditValidator } // GetSigners implements the sdk.Msg interface. func (msg MsgEditValidator) GetSigners() []sdk.AccAddress { @@ -175,7 +184,7 @@ func NewMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amount sdk.C func (msg MsgDelegate) Route() string { return RouterKey } // Type implements the sdk.Msg interface. -func (msg MsgDelegate) Type() string { return "delegate" } +func (msg MsgDelegate) Type() string { return TypeMsgDelegate } // GetSigners implements the sdk.Msg interface. func (msg MsgDelegate) GetSigners() []sdk.AccAddress { @@ -221,7 +230,7 @@ func NewMsgBeginRedelegate( func (msg MsgBeginRedelegate) Route() string { return RouterKey } // Type implements the sdk.Msg interface -func (msg MsgBeginRedelegate) Type() string { return "begin_redelegate" } +func (msg MsgBeginRedelegate) Type() string { return TypeMsgBeginRedelegate } // GetSigners implements the sdk.Msg interface func (msg MsgBeginRedelegate) GetSigners() []sdk.AccAddress { @@ -268,7 +277,7 @@ func NewMsgUndelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amount sdk func (msg MsgUndelegate) Route() string { return RouterKey } // Type implements the sdk.Msg interface. -func (msg MsgUndelegate) Type() string { return "begin_unbonding" } +func (msg MsgUndelegate) Type() string { return TypeMsgUndelegate } // GetSigners implements the sdk.Msg interface. func (msg MsgUndelegate) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{msg.DelegatorAddress} }