diff --git a/CHANGELOG.md b/CHANGELOG.md index b96cb68f1003..db7f9556e07a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## Improvements +* [#14691](https://github.com/cosmos/cosmos-sdk/pull/14691) Change behavior of `sdk.StringifyEvents` to not flatten events attributes by events type. + * This change only affects ABCI message logs, and not the actual events. * [#14692](https://github.com/cosmos/cosmos-sdk/pull/14692) Improve RPC queries error message when app is at height 0. * [#14017](https://github.com/cosmos/cosmos-sdk/pull/14017) Simplify ADR-028 and `address.Module`. * This updates the [ADR-028](https://docs.cosmos.network/main/architecture/adr-028-public-key-addresses) and enhance the `address.Module` API to support module addresses and sub-module addresses in a backward compatible way. diff --git a/types/events.go b/types/events.go index 0d8fafc02c5e..8e015d932d99 100644 --- a/types/events.go +++ b/types/events.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "reflect" - "sort" "strings" "golang.org/x/exp/maps" @@ -278,29 +277,6 @@ func (se StringEvents) String() string { return strings.TrimRight(sb.String(), "\n") } -// Flatten returns a flattened version of StringEvents by grouping all attributes -// per unique event type. -func (se StringEvents) Flatten() StringEvents { - flatEvents := make(map[string][]Attribute) - - for _, e := range se { - flatEvents[e.Type] = append(flatEvents[e.Type], e.Attributes...) - } - keys := make([]string, 0, len(flatEvents)) - res := make(StringEvents, 0, len(flatEvents)) // appeneded to keys, same length of what is allocated to keys - - for ty := range flatEvents { - keys = append(keys, ty) - } - - sort.Strings(keys) - for _, ty := range keys { - res = append(res, StringEvent{Type: ty, Attributes: flatEvents[ty]}) - } - - return res -} - // StringifyEvent converts an Event object to a StringEvent object. func StringifyEvent(e abci.Event) StringEvent { res := StringEvent{Type: e.Type} @@ -324,7 +300,7 @@ func StringifyEvents(events []abci.Event) StringEvents { res = append(res, StringifyEvent(e)) } - return res.Flatten() + return res } // MarkEventsToIndex returns the set of ABCI events, where each event's attribute diff --git a/types/events_test.go b/types/events_test.go index 966157d10158..3e48ca835b05 100644 --- a/types/events_test.go +++ b/types/events_test.go @@ -145,8 +145,8 @@ func (s *eventsTestSuite) TestStringifyEvents() { sdk.NewEvent("message", sdk.NewAttribute(sdk.AttributeKeySender, "foo")), sdk.NewEvent("message", sdk.NewAttribute(sdk.AttributeKeyModule, "bank")), }, - expTxtStr: "\t\t- message\n\t\t\t- sender: foo\n\t\t\t- module: bank", - expJSONStr: "[{\"type\":\"message\",\"attributes\":[{\"key\":\"sender\",\"value\":\"foo\"},{\"key\":\"module\",\"value\":\"bank\"}]}]", + expTxtStr: "\t\t- message\n\t\t\t- sender: foo\n\t\t- message\n\t\t\t- module: bank", + expJSONStr: "[{\"type\":\"message\",\"attributes\":[{\"key\":\"sender\",\"value\":\"foo\"}]},{\"type\":\"message\",\"attributes\":[{\"key\":\"module\",\"value\":\"bank\"}]}]", }, { name: "multiple events with same attributes", @@ -158,8 +158,8 @@ func (s *eventsTestSuite) TestStringifyEvents() { ), sdk.NewEvent("message", sdk.NewAttribute(sdk.AttributeKeySender, "foo")), }, - expTxtStr: "\t\t- message\n\t\t\t- module: staking\n\t\t\t- sender: cosmos1foo\n\t\t\t- sender: foo", - expJSONStr: `[{"type":"message","attributes":[{"key":"module","value":"staking"},{"key":"sender","value":"cosmos1foo"},{"key":"sender","value":"foo"}]}]`, + expTxtStr: "\t\t- message\n\t\t\t- module: staking\n\t\t\t- sender: cosmos1foo\n\t\t- message\n\t\t\t- sender: foo", + expJSONStr: `[{"type":"message","attributes":[{"key":"module","value":"staking"},{"key":"sender","value":"cosmos1foo"}]},{"type":"message","attributes":[{"key":"sender","value":"foo"}]}]`, }, } diff --git a/types/result_test.go b/types/result_test.go index a58425c04a57..ccc6fe8575be 100644 --- a/types/result_test.go +++ b/types/result_test.go @@ -42,13 +42,17 @@ func (s *resultTestSuite) TestParseABCILog() { func (s *resultTestSuite) TestABCIMessageLog() { cdc := codec.NewLegacyAmino() - events := sdk.Events{sdk.NewEvent("transfer", sdk.NewAttribute("sender", "foo"))} + events := sdk.Events{ + sdk.NewEvent("transfer", sdk.NewAttribute("sender", "foo")), + sdk.NewEvent("transfer", sdk.NewAttribute("sender", "bar")), + } msgLog := sdk.NewABCIMessageLog(0, "", events) msgLogs := sdk.ABCIMessageLogs{msgLog} bz, err := cdc.MarshalJSON(msgLogs) s.Require().NoError(err) s.Require().Equal(string(bz), msgLogs.String()) + s.Require().Equal(`[{"msg_index":0,"events":[{"type":"transfer","attributes":[{"key":"sender","value":"foo"}]},{"type":"transfer","attributes":[{"key":"sender","value":"bar"}]}]}]`, msgLogs.String()) } func (s *resultTestSuite) TestNewSearchTxsResult() {