fix(sims): skip operations that use denoms that can't be sent (#20399)
This commit is contained in:
parent
080229f300
commit
74f44b0231
@ -9,8 +9,8 @@ import (
|
||||
json "encoding/json"
|
||||
reflect "reflect"
|
||||
|
||||
legacy "cosmossdk.io/core/legacy"
|
||||
client "github.com/cosmos/cosmos-sdk/client"
|
||||
codec "github.com/cosmos/cosmos-sdk/codec"
|
||||
types "github.com/cosmos/cosmos-sdk/types"
|
||||
module "github.com/cosmos/cosmos-sdk/types/module"
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
@ -67,7 +67,7 @@ func (mr *MockAppModuleBasicMockRecorder) RegisterGRPCGatewayRoutes(arg0, arg1 i
|
||||
}
|
||||
|
||||
// RegisterLegacyAminoCodec mocks base method.
|
||||
func (m *MockAppModuleBasic) RegisterLegacyAminoCodec(arg0 *codec.LegacyAmino) {
|
||||
func (m *MockAppModuleBasic) RegisterLegacyAminoCodec(arg0 legacy.Amino) {
|
||||
m.ctrl.T.Helper()
|
||||
m.ctrl.Call(m, "RegisterLegacyAminoCodec", arg0)
|
||||
}
|
||||
@ -265,7 +265,7 @@ func (m *MockHasAminoCodec) EXPECT() *MockHasAminoCodecMockRecorder {
|
||||
}
|
||||
|
||||
// RegisterLegacyAminoCodec mocks base method.
|
||||
func (m *MockHasAminoCodec) RegisterLegacyAminoCodec(arg0 *codec.LegacyAmino) {
|
||||
func (m *MockHasAminoCodec) RegisterLegacyAminoCodec(arg0 legacy.Amino) {
|
||||
m.ctrl.T.Helper()
|
||||
m.ctrl.Call(m, "RegisterLegacyAminoCodec", arg0)
|
||||
}
|
||||
|
||||
@ -158,6 +158,18 @@ func SimulateMsgWithdrawDelegatorReward(txConfig client.TxConfig, ak types.Accou
|
||||
|
||||
msg := types.NewMsgWithdrawDelegatorReward(addr, validator.GetOperator())
|
||||
|
||||
// get outstanding rewards so we can first check if the withdrawable coins are sendable
|
||||
outstanding, err := k.GetValidatorOutstandingRewardsCoins(ctx, sdk.ValAddress(delAddr))
|
||||
if err != nil {
|
||||
return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(&types.MsgWithdrawDelegatorReward{}), "error getting outstanding rewards"), nil, err
|
||||
}
|
||||
|
||||
for _, v := range outstanding {
|
||||
if !bk.IsSendEnabledDenom(ctx, v.Denom) {
|
||||
return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(msg), "denom send not enabled: "+v.Denom), nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
txCtx := simulation.OperationInput{
|
||||
R: r,
|
||||
App: app,
|
||||
|
||||
@ -156,6 +156,20 @@ func (mr *MockBankKeeperMockRecorder) GetAllBalances(ctx, addr interface{}) *gom
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllBalances", reflect.TypeOf((*MockBankKeeper)(nil).GetAllBalances), ctx, addr)
|
||||
}
|
||||
|
||||
// IsSendEnabledDenom mocks base method.
|
||||
func (m *MockBankKeeper) IsSendEnabledDenom(ctx context.Context, denom string) bool {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "IsSendEnabledDenom", ctx, denom)
|
||||
ret0, _ := ret[0].(bool)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// IsSendEnabledDenom indicates an expected call of IsSendEnabledDenom.
|
||||
func (mr *MockBankKeeperMockRecorder) IsSendEnabledDenom(ctx, denom interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSendEnabledDenom", reflect.TypeOf((*MockBankKeeper)(nil).IsSendEnabledDenom), ctx, denom)
|
||||
}
|
||||
|
||||
// MintCoins mocks base method.
|
||||
func (m *MockBankKeeper) MintCoins(ctx context.Context, moduleName string, amt types0.Coins) error {
|
||||
m.ctrl.T.Helper()
|
||||
|
||||
@ -31,6 +31,7 @@ type BankKeeper interface {
|
||||
SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
|
||||
|
||||
BlockedAddr(addr sdk.AccAddress) bool
|
||||
IsSendEnabledDenom(ctx context.Context, denom string) bool
|
||||
}
|
||||
|
||||
// PoolKeeper defines the expected interface needed to fund & distribute pool balances.
|
||||
|
||||
@ -450,6 +450,10 @@ func SimulateMsgUndelegate(
|
||||
delAddr, val.GetOperator(), sdk.NewCoin(bondDenom, unbondAmt),
|
||||
)
|
||||
|
||||
if !bk.IsSendEnabledDenom(ctx, bondDenom) {
|
||||
return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(msg), "bond denom send not enabled"), nil, nil
|
||||
}
|
||||
|
||||
// need to retrieve the simulation account associated with delegation to retrieve PrivKey
|
||||
var simAccount simtypes.Account
|
||||
|
||||
@ -712,6 +716,10 @@ func SimulateMsgBeginRedelegate(
|
||||
return simtypes.NoOpMsg(types.ModuleName, msgType, "bond denom not found"), nil, err
|
||||
}
|
||||
|
||||
if !bk.IsSendEnabledDenom(ctx, bondDenom) {
|
||||
return simtypes.NoOpMsg(types.ModuleName, msgType, "bond denom send not enabled"), nil, nil
|
||||
}
|
||||
|
||||
msg := types.NewMsgBeginRedelegate(
|
||||
delAddr, srcVal.GetOperator(), destVal.GetOperator(),
|
||||
sdk.NewCoin(bondDenom, redAmt),
|
||||
|
||||
@ -202,6 +202,20 @@ func (mr *MockBankKeeperMockRecorder) GetSupply(ctx, denom interface{}) *gomock.
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSupply", reflect.TypeOf((*MockBankKeeper)(nil).GetSupply), ctx, denom)
|
||||
}
|
||||
|
||||
// IsSendEnabledDenom mocks base method.
|
||||
func (m *MockBankKeeper) IsSendEnabledDenom(ctx context.Context, denom string) bool {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "IsSendEnabledDenom", ctx, denom)
|
||||
ret0, _ := ret[0].(bool)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// IsSendEnabledDenom indicates an expected call of IsSendEnabledDenom.
|
||||
func (mr *MockBankKeeperMockRecorder) IsSendEnabledDenom(ctx, denom interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSendEnabledDenom", reflect.TypeOf((*MockBankKeeper)(nil).IsSendEnabledDenom), ctx, denom)
|
||||
}
|
||||
|
||||
// LockedCoins mocks base method.
|
||||
func (m *MockBankKeeper) LockedCoins(ctx context.Context, addr types2.AccAddress) types2.Coins {
|
||||
m.ctrl.T.Helper()
|
||||
|
||||
@ -40,6 +40,7 @@ type BankKeeper interface {
|
||||
DelegateCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
|
||||
|
||||
BurnCoins(context.Context, []byte, sdk.Coins) error
|
||||
IsSendEnabledDenom(ctx context.Context, denom string) bool
|
||||
}
|
||||
|
||||
// ValidatorSet expected properties for the set of all validators (noalias)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user