Skip to content

Commit 91728fa

Browse files
Fix for issue #115: Disable messages on consumer chain
1 parent 84c24b3 commit 91728fa

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ante
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
sdk "github.com/cosmos/cosmos-sdk/types"
8+
)
9+
10+
type DisabledModulesDecorator struct {
11+
prefixes []string
12+
}
13+
14+
func NewDisabledModulesDecorator(disabledModules ...string) DisabledModulesDecorator {
15+
return DisabledModulesDecorator{prefixes: disabledModules}
16+
}
17+
18+
func (dmd DisabledModulesDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
19+
currHeight := ctx.BlockHeight()
20+
for _, msg := range tx.GetMsgs() {
21+
msgTypeURL := sdk.MsgTypeURL(msg)
22+
23+
for _, prefix := range dmd.prefixes {
24+
if strings.HasPrefix(msgTypeURL, prefix) {
25+
return ctx, fmt.Errorf("tx contains message types from unsupported modules at height %d", currHeight)
26+
}
27+
}
28+
}
29+
30+
return next(ctx, tx, simulate)
31+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package ante_test
2+
3+
import (
4+
"testing"
5+
6+
sdk "github.com/cosmos/cosmos-sdk/types"
7+
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
8+
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
9+
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
10+
ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types"
11+
appconsumer "github.com/cosmos/interchain-security/app/consumer"
12+
"github.com/cosmos/interchain-security/app/consumer/ante"
13+
"github.com/stretchr/testify/require"
14+
"github.com/tendermint/spm/cosmoscmd"
15+
)
16+
17+
func TestDisabledModulesDecorator(t *testing.T) {
18+
txCfg := cosmoscmd.MakeEncodingConfig(appconsumer.ModuleBasics).TxConfig
19+
20+
testCases := []struct {
21+
name string
22+
ctx sdk.Context
23+
msgs []sdk.Msg
24+
expectErr bool
25+
}{
26+
{
27+
name: "IBC module messages supported",
28+
ctx: sdk.Context{},
29+
msgs: []sdk.Msg{
30+
&ibcclienttypes.MsgUpdateClient{},
31+
},
32+
expectErr: false,
33+
},
34+
{
35+
name: "bank module messages supported",
36+
ctx: sdk.Context{},
37+
msgs: []sdk.Msg{
38+
&banktypes.MsgSend{},
39+
},
40+
expectErr: false,
41+
},
42+
{
43+
name: "evidence module messages not supported",
44+
ctx: sdk.Context{},
45+
msgs: []sdk.Msg{
46+
&evidencetypes.MsgSubmitEvidence{},
47+
},
48+
expectErr: true,
49+
},
50+
{
51+
name: "slashing module messages not supported",
52+
ctx: sdk.Context{},
53+
msgs: []sdk.Msg{
54+
&slashingtypes.MsgUnjail{},
55+
},
56+
expectErr: true,
57+
},
58+
}
59+
60+
for _, tc := range testCases {
61+
tc := tc
62+
63+
t.Run(tc.name, func(t *testing.T) {
64+
handler := ante.NewDisabledModulesDecorator("/cosmos.evidence", "/cosmos.slashing")
65+
66+
txBuilder := txCfg.NewTxBuilder()
67+
require.NoError(t, txBuilder.SetMsgs(tc.msgs...))
68+
69+
_, err := handler.AnteHandle(tc.ctx, txBuilder.GetTx(), false,
70+
func(ctx sdk.Context, _ sdk.Tx, _ bool) (sdk.Context, error) { return ctx, nil })
71+
if tc.expectErr {
72+
require.Error(t, err)
73+
} else {
74+
require.NoError(t, err)
75+
}
76+
})
77+
}
78+
}

app/consumer/ante_handler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
3939
ante.NewSetUpContextDecorator(),
4040
ante.NewRejectExtensionOptionsDecorator(),
4141
consumerante.NewMsgFilterDecorator(options.ConsumerKeeper),
42+
consumerante.NewDisabledModulesDecorator("/cosmos.evidence", "/cosmos.slashing"),
4243
ante.NewMempoolFeeDecorator(),
4344
ante.NewValidateBasicDecorator(),
4445
ante.NewTxTimeoutHeightDecorator(),

0 commit comments

Comments
 (0)