From 600e1f7c39a230c513301be1f4ee4a4cec87392c Mon Sep 17 00:00:00 2001 From: swelf Date: Mon, 5 Sep 2022 20:08:59 +0300 Subject: [PATCH 1/6] disabled event filtering --- x/wasm/keeper/keeper_test.go | 16 ++++++++++++++-- x/wasm/keeper/msg_dispatcher.go | 1 + x/wasm/keeper/msg_dispatcher_test.go | 18 +++++++++++++----- x/wasm/keeper/submsg_test.go | 4 ++-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index bb20a39267..275e7451cb 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -637,7 +637,7 @@ func TestExecute(t *testing.T) { assert.Equal(t, sdk.Coins{}, bankKeeper.GetAllBalances(ctx, contractAcct.GetAddress())) // and events emitted - require.Len(t, em.Events(), 9) + require.Len(t, em.Events(), 11) expEvt := sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", addr.String())) assert.Equal(t, expEvt, em.Events()[3], prettyEvents(t, em.Events())) @@ -1148,6 +1148,18 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { {"amount": "100000denom"}, }, }, + { + "Type": "message", + "Attr": []dict{ + {"sender": contractAddr}, + }, + }, + { + "Type": "message", + "Attr": []dict{ + {"module": "bank"}, + }, + }, } expJSONEvts := string(mustMarshal(t, expEvents)) assert.JSONEq(t, expJSONEvts, prettyEvents(t, ctx.EventManager().Events()), prettyEvents(t, ctx.EventManager().Events())) @@ -1298,7 +1310,7 @@ func TestSudo(t *testing.T) { balance := bankKeeper.GetBalance(ctx, comAcct.GetAddress(), "denom") assert.Equal(t, sdk.NewInt64Coin("denom", 76543), balance) // and events emitted - require.Len(t, em.Events(), 4, prettyEvents(t, em.Events())) + require.Len(t, em.Events(), 6, prettyEvents(t, em.Events())) expEvt := sdk.NewEvent("sudo", sdk.NewAttribute("_contract_address", addr.String())) assert.Equal(t, expEvt, em.Events()[0]) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index 59a836fa5f..23dfcc3891 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -189,6 +189,7 @@ func redactError(err error) error { } func filterEvents(events []sdk.Event) []sdk.Event { + return events // pre-allocate space for efficiency res := make([]sdk.Event, 0, len(events)) for _, ev := range events { diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go index e514ae4119..84c10bb9fd 100644 --- a/x/wasm/keeper/msg_dispatcher_test.go +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -274,6 +274,7 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte{}, expCommits: []bool{false, false}, }, + // NOTE: event filtering has been disabled, test looks a bit useless "message event filtered without reply": { msgs: []wasmvmtypes.SubMsg{{ ReplyOn: wasmvmtypes.ReplyNever, @@ -294,8 +295,9 @@ func TestDispatchSubmessages(t *testing.T) { }, expData: nil, expCommits: []bool{true}, - expEvents: []sdk.Event{sdk.NewEvent("execute", sdk.NewAttribute("foo", "bar"))}, + expEvents: []sdk.Event{sdk.NewEvent("message"), sdk.NewEvent("execute", sdk.NewAttribute("foo", "bar"))}, }, + // NOTE: event filtering has been disabled, test looks a bit useless "wasm reply gets proper events": { // put fake wasmmsg in here to show where it comes from msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Wasm: &wasmvmtypes.WasmMsg{}}}}, @@ -308,15 +310,18 @@ func TestDispatchSubmessages(t *testing.T) { // ensure the input events are what we expect // I didn't use require.Equal() to act more like a contract... but maybe that would be better - if len(res.Events) != 2 { + if len(res.Events) != 3 { return nil, fmt.Errorf("event count: %#v", res.Events) } - if res.Events[0].Type != "execute" { + if res.Events[0].Type != "message" { return nil, fmt.Errorf("event0: %#v", res.Events[0]) } - if res.Events[1].Type != "wasm" { + if res.Events[1].Type != "execute" { return nil, fmt.Errorf("event1: %#v", res.Events[1]) } + if res.Events[2].Type != "wasm" { + return nil, fmt.Errorf("event2: %#v", res.Events[2]) + } // let's add a custom event here and see if it makes it out ctx.EventManager().EmitEvent(sdk.NewEvent("wasm-reply")) @@ -328,7 +333,7 @@ func TestDispatchSubmessages(t *testing.T) { msgHandler: &wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { events = []sdk.Event{ - sdk.NewEvent("message", sdk.NewAttribute("_contract_address", contractAddr.String())), + sdk.NewEvent("message", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), // we don't know what the contarctAddr will be so we can't use it in the final tests sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("wasm", sdk.NewAttribute("random", "data")), @@ -339,11 +344,13 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte("subData"), expCommits: []bool{true}, expEvents: []sdk.Event{ + sdk.NewEvent("message", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("wasm", sdk.NewAttribute("random", "data")), sdk.NewEvent("wasm-reply"), }, }, + // NOTE: event filtering has been disabled, test looks a bit useless "non-wasm reply events get filtered": { // show events from a stargate message gets filtered out msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Stargate: &wasmvmtypes.StargateMsg{}}}}, @@ -381,6 +388,7 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte("subData"), expCommits: []bool{true}, expEvents: []sdk.Event{ + sdk.NewEvent("message", sdk.NewAttribute("stargate", "something-something")), sdk.NewEvent("non-determinstic"), // the event from reply is also exposed sdk.NewEvent("stargate-reply"), diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 4cf25fc894..d9b095584e 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -207,7 +207,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { assertGotContractAddr := func(t *testing.T, ctx sdk.Context, contract, emptyAccount string, response wasmvmtypes.SubMsgResult) { // should get the events emitted on new contract - event := response.Ok.Events[0] + event := response.Ok.Events[1] require.Equal(t, event.Type, "instantiate") assert.Equal(t, event.Attributes[0].Key, "_contract_address") eventAddr := event.Attributes[0].Value @@ -277,7 +277,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "instantiate contract gets address in data and events": { submsgID: 21, msg: instantiateContract, - resultAssertions: []assertion{assertReturnedEvents(1), assertGotContractAddr}, + resultAssertions: []assertion{assertReturnedEvents(2), assertGotContractAddr}, }, } for name, tc := range cases { From d2f664b274e2e6ac337839069d8b95ae7c07dc99 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Mon, 12 Sep 2022 12:51:45 +0300 Subject: [PATCH 2/6] Do not filter out ibc events --- x/wasm/keeper/keeper_test.go | 16 ++-------------- x/wasm/keeper/msg_dispatcher.go | 13 +++++++++++-- x/wasm/keeper/msg_dispatcher_test.go | 18 +++++------------- x/wasm/keeper/submsg_test.go | 4 ++-- 4 files changed, 20 insertions(+), 31 deletions(-) diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 275e7451cb..bb20a39267 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -637,7 +637,7 @@ func TestExecute(t *testing.T) { assert.Equal(t, sdk.Coins{}, bankKeeper.GetAllBalances(ctx, contractAcct.GetAddress())) // and events emitted - require.Len(t, em.Events(), 11) + require.Len(t, em.Events(), 9) expEvt := sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", addr.String())) assert.Equal(t, expEvt, em.Events()[3], prettyEvents(t, em.Events())) @@ -1148,18 +1148,6 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { {"amount": "100000denom"}, }, }, - { - "Type": "message", - "Attr": []dict{ - {"sender": contractAddr}, - }, - }, - { - "Type": "message", - "Attr": []dict{ - {"module": "bank"}, - }, - }, } expJSONEvts := string(mustMarshal(t, expEvents)) assert.JSONEq(t, expJSONEvts, prettyEvents(t, ctx.EventManager().Events()), prettyEvents(t, ctx.EventManager().Events())) @@ -1310,7 +1298,7 @@ func TestSudo(t *testing.T) { balance := bankKeeper.GetBalance(ctx, comAcct.GetAddress(), "denom") assert.Equal(t, sdk.NewInt64Coin("denom", 76543), balance) // and events emitted - require.Len(t, em.Events(), 6, prettyEvents(t, em.Events())) + require.Len(t, em.Events(), 4, prettyEvents(t, em.Events())) expEvt := sdk.NewEvent("sudo", sdk.NewAttribute("_contract_address", addr.String())) assert.Equal(t, expEvt, em.Events()[0]) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index 23dfcc3891..dbb9470843 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -188,12 +188,21 @@ func redactError(err error) error { return fmt.Errorf("codespace: %s, code: %d", codespace, code) } +func isIBCEvent(event sdk.Event) bool { + for _, attr := range event.Attributes { + if bytes.Contains(attr.Value, []byte("ibc_")) { + return true + } + } + return false +} + func filterEvents(events []sdk.Event) []sdk.Event { - return events // pre-allocate space for efficiency res := make([]sdk.Event, 0, len(events)) for _, ev := range events { - if ev.Type != "message" { + // we filter out all 'message' type events but if they are ibc events we must keep them for the IBC relayer (hermes particularly) + if ev.Type != "message" || isIBCEvent(ev) { res = append(res, ev) } } diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go index 84c10bb9fd..83d4511ff1 100644 --- a/x/wasm/keeper/msg_dispatcher_test.go +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -274,7 +274,6 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte{}, expCommits: []bool{false, false}, }, - // NOTE: event filtering has been disabled, test looks a bit useless "message event filtered without reply": { msgs: []wasmvmtypes.SubMsg{{ ReplyOn: wasmvmtypes.ReplyNever, @@ -295,9 +294,8 @@ func TestDispatchSubmessages(t *testing.T) { }, expData: nil, expCommits: []bool{true}, - expEvents: []sdk.Event{sdk.NewEvent("message"), sdk.NewEvent("execute", sdk.NewAttribute("foo", "bar"))}, + expEvents: []sdk.Event{sdk.NewEvent("execute", sdk.NewAttribute("foo", "bar"))}, }, - // NOTE: event filtering has been disabled, test looks a bit useless "wasm reply gets proper events": { // put fake wasmmsg in here to show where it comes from msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Wasm: &wasmvmtypes.WasmMsg{}}}}, @@ -310,16 +308,13 @@ func TestDispatchSubmessages(t *testing.T) { // ensure the input events are what we expect // I didn't use require.Equal() to act more like a contract... but maybe that would be better - if len(res.Events) != 3 { + if len(res.Events) != 2 { return nil, fmt.Errorf("event count: %#v", res.Events) } - if res.Events[0].Type != "message" { - return nil, fmt.Errorf("event0: %#v", res.Events[0]) - } - if res.Events[1].Type != "execute" { + if res.Events[0].Type != "execute" { return nil, fmt.Errorf("event1: %#v", res.Events[1]) } - if res.Events[2].Type != "wasm" { + if res.Events[1].Type != "wasm" { return nil, fmt.Errorf("event2: %#v", res.Events[2]) } @@ -333,7 +328,7 @@ func TestDispatchSubmessages(t *testing.T) { msgHandler: &wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { events = []sdk.Event{ - sdk.NewEvent("message", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), + sdk.NewEvent("message", sdk.NewAttribute("_contract_address", contractAddr.String())), // we don't know what the contarctAddr will be so we can't use it in the final tests sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("wasm", sdk.NewAttribute("random", "data")), @@ -344,13 +339,11 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte("subData"), expCommits: []bool{true}, expEvents: []sdk.Event{ - sdk.NewEvent("message", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("execute", sdk.NewAttribute("_contract_address", "placeholder-random-addr")), sdk.NewEvent("wasm", sdk.NewAttribute("random", "data")), sdk.NewEvent("wasm-reply"), }, }, - // NOTE: event filtering has been disabled, test looks a bit useless "non-wasm reply events get filtered": { // show events from a stargate message gets filtered out msgs: []wasmvmtypes.SubMsg{{ID: 1, ReplyOn: wasmvmtypes.ReplyAlways, Msg: wasmvmtypes.CosmosMsg{Stargate: &wasmvmtypes.StargateMsg{}}}}, @@ -388,7 +381,6 @@ func TestDispatchSubmessages(t *testing.T) { expData: []byte("subData"), expCommits: []bool{true}, expEvents: []sdk.Event{ - sdk.NewEvent("message", sdk.NewAttribute("stargate", "something-something")), sdk.NewEvent("non-determinstic"), // the event from reply is also exposed sdk.NewEvent("stargate-reply"), diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index d9b095584e..4cf25fc894 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -207,7 +207,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { assertGotContractAddr := func(t *testing.T, ctx sdk.Context, contract, emptyAccount string, response wasmvmtypes.SubMsgResult) { // should get the events emitted on new contract - event := response.Ok.Events[1] + event := response.Ok.Events[0] require.Equal(t, event.Type, "instantiate") assert.Equal(t, event.Attributes[0].Key, "_contract_address") eventAddr := event.Attributes[0].Value @@ -277,7 +277,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "instantiate contract gets address in data and events": { submsgID: 21, msg: instantiateContract, - resultAssertions: []assertion{assertReturnedEvents(2), assertGotContractAddr}, + resultAssertions: []assertion{assertReturnedEvents(1), assertGotContractAddr}, }, } for name, tc := range cases { From 8301d1dcba98683afc1f575e81cdbb2db5352889 Mon Sep 17 00:00:00 2001 From: pr0n00gler Date: Mon, 12 Sep 2022 14:40:23 +0300 Subject: [PATCH 3/6] review fixes: comment, small test --- x/wasm/keeper/msg_dispatcher.go | 4 +++- x/wasm/keeper/msg_dispatcher_test.go | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index dbb9470843..27e1a3f264 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -190,7 +190,9 @@ func redactError(err error) error { func isIBCEvent(event sdk.Event) bool { for _, attr := range event.Attributes { - if bytes.Contains(attr.Value, []byte("ibc_")) { + // Hermes ibc-rs subscribes on such events, so we need to keep them to have the ibc-rs working properly + // https://github.com/informalsystems/ibc-rs/blob/ed4dd8c8b4ebd695730de2a1c69f3011cb179352/relayer/src/event/monitor.rs#L134 + if bytes.HasPrefix(attr.Value, []byte("ibc_")) { return true } } diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go index 83d4511ff1..984450ed9f 100644 --- a/x/wasm/keeper/msg_dispatcher_test.go +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -374,6 +374,7 @@ func TestDispatchSubmessages(t *testing.T) { sdk.NewEvent("message", sdk.NewAttribute("stargate", "something-something")), // we still emit this to the client, but not the contract sdk.NewEvent("non-determinstic"), + sdk.NewEvent("message", sdk.NewAttribute("module", "ibc_channel")), } return events, [][]byte{[]byte("subData")}, nil }, @@ -382,6 +383,7 @@ func TestDispatchSubmessages(t *testing.T) { expCommits: []bool{true}, expEvents: []sdk.Event{ sdk.NewEvent("non-determinstic"), + sdk.NewEvent("message", sdk.NewAttribute("module", "ibc_channel")), // the event from reply is also exposed sdk.NewEvent("stargate-reply"), }, From 9661821bf9761c35aa7fd203bd382f86d9e67d47 Mon Sep 17 00:00:00 2001 From: swelf Date: Wed, 30 Nov 2022 16:36:14 +0300 Subject: [PATCH 4/6] removed update validator set during initgenesis --- x/wasm/keeper/genesis.go | 4 ++-- x/wasm/module.go | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index 7fa5280b9e..9564fa3af4 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -16,7 +16,7 @@ type ValidatorSetSource interface { // InitGenesis sets supply information for genesis. // // CONTRACT: all types of accounts must have been already initialized/created -func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, stakingKeeper ValidatorSetSource, msgHandler sdk.Handler) ([]abci.ValidatorUpdate, error) { +func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, msgHandler sdk.Handler) ([]abci.ValidatorUpdate, error) { contractKeeper := NewGovPermissionKeeper(keeper) keeper.SetParams(ctx, data.Params) var maxCodeID uint64 @@ -78,7 +78,7 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki return nil, sdkerrors.Wrap(err, "genesis") } } - return stakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) + return []abci.ValidatorUpdate{}, nil } // ExportGenesis returns a GenesisState for a given context and keeper. diff --git a/x/wasm/module.go b/x/wasm/module.go index a237a910d4..fbedb8ec8a 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -100,11 +100,10 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // AppModule implements an application module for the wasm module. type AppModule struct { AppModuleBasic - cdc codec.Codec - keeper *Keeper - validatorSetSource keeper.ValidatorSetSource - accountKeeper types.AccountKeeper // for simulation - bankKeeper simulation.BankKeeper + cdc codec.Codec + keeper *Keeper + accountKeeper types.AccountKeeper // for simulation + bankKeeper simulation.BankKeeper } // ConsensusVersion is a sequence number for state-breaking change of the @@ -117,17 +116,15 @@ func (AppModule) ConsensusVersion() uint64 { return 1 } func NewAppModule( cdc codec.Codec, keeper *Keeper, - validatorSetSource keeper.ValidatorSetSource, ak types.AccountKeeper, bk simulation.BankKeeper, ) AppModule { return AppModule{ - AppModuleBasic: AppModuleBasic{}, - cdc: cdc, - keeper: keeper, - validatorSetSource: validatorSetSource, - accountKeeper: ak, - bankKeeper: bk, + AppModuleBasic: AppModuleBasic{}, + cdc: cdc, + keeper: keeper, + accountKeeper: ak, + bankKeeper: bk, } } @@ -158,7 +155,7 @@ func (AppModule) QuerierRoute() string { func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState GenesisState cdc.MustUnmarshalJSON(data, &genesisState) - validators, err := InitGenesis(ctx, am.keeper, genesisState, am.validatorSetSource, am.Route().Handler()) + validators, err := InitGenesis(ctx, am.keeper, genesisState, am.Route().Handler()) if err != nil { panic(err) } From 5abd66ab6998f563de19aa4581a188424973d8b7 Mon Sep 17 00:00:00 2001 From: oldremez <83083413+oldremez@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:52:54 +0300 Subject: [PATCH 5/6] do not filter out feerefunder messages --- x/wasm/keeper/msg_dispatcher.go | 16 ++++++++++++++-- x/wasm/keeper/msg_dispatcher_test.go | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/x/wasm/keeper/msg_dispatcher.go b/x/wasm/keeper/msg_dispatcher.go index 27e1a3f264..ea3bd3c921 100644 --- a/x/wasm/keeper/msg_dispatcher.go +++ b/x/wasm/keeper/msg_dispatcher.go @@ -199,12 +199,24 @@ func isIBCEvent(event sdk.Event) bool { return false } +func isFeerefunderEvent(event sdk.Event) bool { + for _, attr := range event.Attributes { + // During contracts execution there are fee being locked and feerefunder module emits lock_fees event + if bytes.Equal(attr.Key, []byte("module")) && bytes.Equal(attr.Value, []byte("feerefunder")) { + return true + } + } + return false +} + func filterEvents(events []sdk.Event) []sdk.Event { // pre-allocate space for efficiency res := make([]sdk.Event, 0, len(events)) for _, ev := range events { - // we filter out all 'message' type events but if they are ibc events we must keep them for the IBC relayer (hermes particularly) - if ev.Type != "message" || isIBCEvent(ev) { + // we filter out all 'message' type events but + // 1. ibc events (we must keep them for the IBC relayer (hermes particularly)) + // 2. feerefunder events + if ev.Type != "message" || isIBCEvent(ev) || isFeerefunderEvent(ev) { res = append(res, ev) } } diff --git a/x/wasm/keeper/msg_dispatcher_test.go b/x/wasm/keeper/msg_dispatcher_test.go index 984450ed9f..8db30bd1e4 100644 --- a/x/wasm/keeper/msg_dispatcher_test.go +++ b/x/wasm/keeper/msg_dispatcher_test.go @@ -375,6 +375,7 @@ func TestDispatchSubmessages(t *testing.T) { // we still emit this to the client, but not the contract sdk.NewEvent("non-determinstic"), sdk.NewEvent("message", sdk.NewAttribute("module", "ibc_channel")), + sdk.NewEvent("message", sdk.NewAttribute("module", "feerefunder")), } return events, [][]byte{[]byte("subData")}, nil }, @@ -384,6 +385,7 @@ func TestDispatchSubmessages(t *testing.T) { expEvents: []sdk.Event{ sdk.NewEvent("non-determinstic"), sdk.NewEvent("message", sdk.NewAttribute("module", "ibc_channel")), + sdk.NewEvent("message", sdk.NewAttribute("module", "feerefunder")), // the event from reply is also exposed sdk.NewEvent("stargate-reply"), }, From fe1312e4dbd88fbb1b58c3b5f2235af8e181409a Mon Sep 17 00:00:00 2001 From: swelf Date: Wed, 30 Nov 2022 17:10:54 +0300 Subject: [PATCH 6/6] fixed tests --- app/app.go | 4 ++-- x/wasm/genesis_test.go | 2 +- x/wasm/keeper/genesis_test.go | 18 +++++------------- x/wasm/module_test.go | 2 +- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/app/app.go b/app/app.go index 300ef7b150..eaa558462d 100644 --- a/app/app.go +++ b/app/app.go @@ -577,7 +577,7 @@ func NewWasmApp( distr.NewAppModule(appCodec, app.distrKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), staking.NewAppModule(appCodec, app.stakingKeeper, app.accountKeeper, app.bankKeeper), upgrade.NewAppModule(app.upgradeKeeper), - wasm.NewAppModule(appCodec, &app.wasmKeeper, app.stakingKeeper, app.accountKeeper, app.bankKeeper), + wasm.NewAppModule(appCodec, &app.wasmKeeper, app.accountKeeper, app.bankKeeper), evidence.NewAppModule(app.evidenceKeeper), feegrantmodule.NewAppModule(appCodec, app.accountKeeper, app.bankKeeper, app.feeGrantKeeper, app.interfaceRegistry), authzmodule.NewAppModule(appCodec, app.authzKeeper, app.accountKeeper, app.bankKeeper, app.interfaceRegistry), @@ -702,7 +702,7 @@ func NewWasmApp( slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper), params.NewAppModule(app.paramsKeeper), evidence.NewAppModule(app.evidenceKeeper), - wasm.NewAppModule(appCodec, &app.wasmKeeper, app.stakingKeeper, app.accountKeeper, app.bankKeeper), + wasm.NewAppModule(appCodec, &app.wasmKeeper, app.accountKeeper, app.bankKeeper), ibc.NewAppModule(app.ibcKeeper), transferModule, ) diff --git a/x/wasm/genesis_test.go b/x/wasm/genesis_test.go index ea97c97f07..3c8c727695 100644 --- a/x/wasm/genesis_test.go +++ b/x/wasm/genesis_test.go @@ -79,7 +79,7 @@ func TestInitGenesis(t *testing.T) { q2 := newData.module.LegacyQuerierHandler(nil) // initialize new app with genstate - InitGenesis(newData.ctx, &newData.keeper, *genState, newData.stakingKeeper, newData.module.Route().Handler()) + InitGenesis(newData.ctx, &newData.keeper, *genState, newData.module.Route().Handler()) // run same checks again on newdata, to make sure it was reinitialized correctly assertCodeList(t, q2, newData.ctx, 1) diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index ff7c6db53a..57189eb3b2 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -26,7 +26,6 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" - "github.com/tendermint/tendermint/proto/tendermint/crypto" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -130,7 +129,7 @@ func TestGenesisExportImport(t *testing.T) { var importState wasmTypes.GenesisState err = dstKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) require.NoError(t, err) - InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) + InitGenesis(dstCtx, dstKeeper, importState, TestHandler(contractKeeper)) // compare whole DB for j := range srcStoreKeys { @@ -411,14 +410,7 @@ func TestGenesisInit(t *testing.T) { }, Params: types.DefaultParams(), }, - stakingMock: StakingKeeperMock{expCalls: 1, validatorUpdate: []abci.ValidatorUpdate{ - { - PubKey: crypto.PublicKey{Sum: &crypto.PublicKey_Ed25519{ - Ed25519: []byte("a valid key"), - }}, - Power: 100, - }, - }}, + stakingMock: StakingKeeperMock{expCalls: 0, validatorUpdate: []abci.ValidatorUpdate{}}, msgHandlerMock: MockMsgHandler{expCalls: 1, expMsg: types.MsgStoreCodeFixture()}, expSuccess: true, }, @@ -440,7 +432,7 @@ func TestGenesisInit(t *testing.T) { keeper, ctx, _ := setupKeeper(t) require.NoError(t, types.ValidateGenesis(spec.src)) - gotValidatorSet, gotErr := InitGenesis(ctx, keeper, spec.src, &spec.stakingMock, spec.msgHandlerMock.Handle) + gotValidatorSet, gotErr := InitGenesis(ctx, keeper, spec.src, spec.msgHandlerMock.Handle) if !spec.expSuccess { require.Error(t, gotErr) return @@ -513,7 +505,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { ctx = ctx.WithBlockHeight(0).WithGasMeter(sdk.NewInfiniteGasMeter()) // when - _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) + _, err = InitGenesis(ctx, keeper, importState, TestHandler(contractKeeper)) require.NoError(t, err) // verify wasm code @@ -615,7 +607,7 @@ func TestSupportedGenMsgTypes(t *testing.T) { keepers.Faucet.Fund(ctx, myAddress, sdk.NewCoin(denom, sdk.NewInt(100))) // when - _, err = InitGenesis(ctx, keeper, importState, &StakingKeeperMock{}, TestHandler(keepers.ContractKeeper)) + _, err = InitGenesis(ctx, keeper, importState, TestHandler(keepers.ContractKeeper)) require.NoError(t, err) // verify code stored diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index ab52363b71..77035e6c71 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -38,7 +38,7 @@ func setupTest(t *testing.T) testData { ctx, keepers := CreateTestInput(t, false, "iterator,staking,stargate") cdc := keeper.MakeTestCodec(t) data := testData{ - module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper, keepers.AccountKeeper, keepers.BankKeeper), + module: NewAppModule(cdc, keepers.WasmKeeper, keepers.AccountKeeper, keepers.BankKeeper), ctx: ctx, acctKeeper: keepers.AccountKeeper, keeper: *keepers.WasmKeeper,