From 1cdf9ab91a43adad760fa7e5785d37009d049347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 5 Aug 2021 16:18:57 +0200 Subject: [PATCH 1/5] add tx fee event --- types/events.go | 1 + x/auth/ante/fee.go | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/types/events.go b/types/events.go index 27a0017635af..9c495a9da2a7 100644 --- a/types/events.go +++ b/types/events.go @@ -227,6 +227,7 @@ var ( AttributeKeyAccountSequence = "acc_seq" AttributeKeySignature = "signature" + AttributeKeyFee = "fee" EventTypeMessage = "message" diff --git a/x/auth/ante/fee.go b/x/auth/ante/fee.go index e183887d0fc9..7b5fee504c94 100644 --- a/x/auth/ante/fee.go +++ b/x/auth/ante/fee.go @@ -117,6 +117,12 @@ func (dfd DeductFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bo } } + var events sdk.Events + events = append(events, sdk.NewEvent(sdk.EventTypeTx, + sdk.NewAttribute(sdk.AttributeKeyFee, feeTx.GetFee().String()), + )) + ctx.EventManager().EmitEvents(events) + return next(ctx, tx, simulate) } From be0ac49c75dd5dff38b14de2456a54b660410c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Fri, 6 Aug 2021 17:05:45 +0200 Subject: [PATCH 2/5] add cli test Copied QueryTxByEventCmd test and updated to use QueryTxsByEvent command to test fee event emission --- x/auth/client/testutil/suite.go | 70 +++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 666542e30e1a..379c07b64838 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -428,6 +428,76 @@ func (s *IntegrationTestSuite) TestCLIQueryTxCmdByEvents() { } } +func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { + val := s.network.Validators[0] + + account2, err := val.ClientCtx.Keyring.Key("newAccount2") + s.Require().NoError(err) + + sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 10) + + // Send coins. + out, err := s.createBankMsg( + val, account2.GetAddress(), + sdk.NewCoins(sendTokens), + ) + s.Require().NoError(err) + var txRes sdk.TxResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txRes)) + s.Require().NoError(s.network.WaitForNextBlock()) + + // Query the tx by hash to get the inner tx. + out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, authcli.QueryTxCmd(), []string{txRes.TxHash, fmt.Sprintf("--%s=json", tmcli.OutputFlag)}) + s.Require().NoError(err) + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txRes)) + + testCases := []struct { + name string + args []string + expectErr bool + expectErrStr string + }{ + { + "fee event happy case", + []string{ + fmt.Sprintf("--events=tx.fee=%s", + sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }, + false, "", + }, + { + "no matching fee event", + []string{ + fmt.Sprintf("--events=tx.fee=%s", + sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(0))).String()), + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }, + false, "", + }, + } + + for _, tc := range testCases { + tc := tc + s.Run(tc.name, func() { + cmd := authcli.QueryTxsByEventsCmd() + clientCtx := val.ClientCtx + + out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) + if tc.expectErr { + s.Require().Error(err) + s.Require().Contains(err.Error(), tc.expectErrStr) + } else { + var result sdk.SearchTxsResult + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) + if len(result.Txs) != 0 { + s.Require().NotNil(result.Txs[0]) + } + } + }) + } +} + func (s *IntegrationTestSuite) TestCLISendGenerateSignAndBroadcast() { val1 := s.network.Validators[0] From f72d97f4ab6611a2267d7cd03b5f93b21c22fb33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Fri, 6 Aug 2021 17:11:22 +0200 Subject: [PATCH 3/5] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2880158a22f3..51be3721ccba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Features +* [\#9860](https://github.com/cosmos/cosmos-sdk/pull/9860) Emit transaction fee in ante handler fee decorator. The event type is `tx` and the attribute is `fee`. * [\#9776](https://github.com/cosmos/cosmos-sdk/pull/9776) Add flag `staking-bond-denom` to specify the staking bond denomination value when initializing a new chain. * [\#9533](https://github.com/cosmos/cosmos-sdk/pull/9533) Added a new gRPC method, `DenomOwners`, in `x/bank` to query for all account holders of a specific denomination. * (bank) [\#9618](https://github.com/cosmos/cosmos-sdk/pull/9618) Update bank.Metadata: add URI and URIHash attributes. From c103d797e21e2e4a50facbf2513b0ddbeebfa4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Fri, 6 Aug 2021 17:20:05 +0200 Subject: [PATCH 4/5] update tests --- x/auth/client/testutil/suite.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 379c07b64838..fd4a472f841c 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -452,10 +452,9 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txRes)) testCases := []struct { - name string - args []string - expectErr bool - expectErrStr string + name string + args []string + expectEmpty bool }{ { "fee event happy case", @@ -464,7 +463,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, - false, "", + false, }, { "no matching fee event", @@ -473,7 +472,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(0))).String()), fmt.Sprintf("--%s=json", tmcli.OutputFlag), }, - false, "", + true, }, } @@ -484,15 +483,16 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { clientCtx := val.ClientCtx out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Error(err) - s.Require().Contains(err.Error(), tc.expectErrStr) + s.Require().NoError(err) + + var result sdk.SearchTxsResult + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) + + if tc.expectEmpty { + s.Require().Equal(0, len(result.Txs)) } else { - var result sdk.SearchTxsResult - s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) - if len(result.Txs) != 0 { - s.Require().NotNil(result.Txs[0]) - } + s.Require().NotEqual(0, len(result.Txs)) + s.Require().NotNil(result.Txs[0]) } }) } From 7394c51df2d15769b4ffda515d3b812541d5e527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:28:01 +0200 Subject: [PATCH 5/5] apply review suggestions --- x/auth/ante/fee.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x/auth/ante/fee.go b/x/auth/ante/fee.go index 7b5fee504c94..b1d1d72a770e 100644 --- a/x/auth/ante/fee.go +++ b/x/auth/ante/fee.go @@ -117,10 +117,9 @@ func (dfd DeductFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bo } } - var events sdk.Events - events = append(events, sdk.NewEvent(sdk.EventTypeTx, + events := sdk.Events{sdk.NewEvent(sdk.EventTypeTx, sdk.NewAttribute(sdk.AttributeKeyFee, feeTx.GetFee().String()), - )) + )} ctx.EventManager().EmitEvents(events) return next(ctx, tx, simulate)