From ac4b8dfeb9b3d34d894e5318ee720b36327ef630 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 09:53:52 +0200 Subject: [PATCH 1/8] analytics(evm): replace telemetry gauges with counters and add gasUsed counter --- x/evm/keeper/msg_server.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index dd8d012734..bafcdffb3e 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -48,18 +48,19 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t } defer func() { - if tx.Value().IsInt64() { - telemetry.SetGauge( - float32(tx.Value().Int64()), - "tx", "msg", "ethereum_tx", - ) - } - telemetry.IncrCounterWithLabels( - []string{types.ModuleName, "ethereum_tx"}, + []string{"tx", "msg", "ethereum_tx", "total"}, 1, labels, ) + + if response.GasUsed != 0 { + telemetry.IncrCounterWithLabels( + []string{"tx", "msg", "ethereum_tx", "gas_used", "total"}, + float32(response.GasUsed), + labels, + ) + } }() attrs := []sdk.Attribute{ From 01412e8c6a9477b9bd486b6f054da3c81cec94d9 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 10:58:15 +0200 Subject: [PATCH 2/8] analytics(feemarket): add telemetry gauges for base fee and block gas --- x/feemarket/keeper/abci.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/x/feemarket/keeper/abci.go b/x/feemarket/keeper/abci.go index 4ad50e8f59..5f05aa5e27 100644 --- a/x/feemarket/keeper/abci.go +++ b/x/feemarket/keeper/abci.go @@ -6,6 +6,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tharsis/ethermint/x/feemarket/types" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -20,6 +21,10 @@ func (k *Keeper) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { k.SetBaseFee(ctx, baseFee) + defer func() { + telemetry.SetGauge(float32(baseFee.Int64()), "fee_market", "base_fee") + }() + // Store current base fee in event ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( @@ -42,6 +47,10 @@ func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) { k.SetBlockGasUsed(ctx, gasUsed) + defer func() { + telemetry.SetGauge(float32(gasUsed), "fee_market", "block_gas") + }() + ctx.EventManager().EmitEvent(sdk.NewEvent( "block_gas", sdk.NewAttribute("height", fmt.Sprintf("%d", ctx.BlockHeight())), From a9395378a9f14e5573a15a036e2ac94fb7f6f507 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 12:10:08 +0200 Subject: [PATCH 3/8] analytics(feemarket): add telemetry gauges for gas_used per gas_limit --- x/evm/keeper/msg_server.go | 12 ++++++++++++ x/evm/keeper/state_transition.go | 12 +++++++++++- x/feemarket/keeper/abci.go | 4 ++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index bafcdffb3e..ed1857fd14 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -34,11 +34,13 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t if tx.To() == nil { labels = []metrics.Label{ telemetry.NewLabel("execution", "create"), + telemetry.NewLabel("from", sender), } } else { labels = []metrics.Label{ telemetry.NewLabel("execution", "call"), telemetry.NewLabel("to", tx.To().Hex()), // recipient address (contract or account) + telemetry.NewLabel("from", sender), } } @@ -60,6 +62,16 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t float32(response.GasUsed), labels, ) + + gasUsed := sdk.NewDec(int64(response.GasUsed)) + gasRatio, err := gasUsed.QuoInt64(int64(tx.Gas())).Float64() + if err == nil { + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", "ethereum_tx", "gas_used", "per", "gas_limit"}, + float32(gasRatio), + labels, + ) + } } }() diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index 0372cb7161..eea7b18a53 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -6,6 +6,7 @@ import ( tmtypes "github.com/tendermint/tendermint/types" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -278,7 +279,8 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t } // refund gas in order to match the Ethereum gas consumption instead of the default SDK one. - if err = k.RefundGas(ctx, msg, msg.Gas()-res.GasUsed, cfg.Params.EvmDenom); err != nil { + refund := msg.Gas() - res.GasUsed + if err = k.RefundGas(ctx, msg, refund, cfg.Params.EvmDenom); err != nil { return nil, sdkerrors.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From()) } @@ -297,6 +299,14 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t // reset the gas meter for current cosmos transaction k.ResetGasMeterAndConsumeGas(ctx, totalGasUsed) + + defer func() { + telemetry.IncrCounter( + float32(refund), + "tx", "msg", "ethereum", "tx_refund", "total", + ) + }() + return res, nil } diff --git a/x/feemarket/keeper/abci.go b/x/feemarket/keeper/abci.go index 5f05aa5e27..bd4992dfc3 100644 --- a/x/feemarket/keeper/abci.go +++ b/x/feemarket/keeper/abci.go @@ -22,7 +22,7 @@ func (k *Keeper) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { k.SetBaseFee(ctx, baseFee) defer func() { - telemetry.SetGauge(float32(baseFee.Int64()), "fee_market", "base_fee") + telemetry.SetGauge(float32(baseFee.Int64()), "feemarket", "base_fee") }() // Store current base fee in event @@ -48,7 +48,7 @@ func (k *Keeper) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) { k.SetBlockGasUsed(ctx, gasUsed) defer func() { - telemetry.SetGauge(float32(gasUsed), "fee_market", "block_gas") + telemetry.SetGauge(float32(gasUsed), "feemarket", "block_gas") }() ctx.EventManager().EmitEvent(sdk.NewEvent( From 4bf1f55d21d7dd61a0396740fe2c1817ee43f66e Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 12:10:42 +0200 Subject: [PATCH 4/8] analytics(feemarket): remove refund telemetry --- x/evm/keeper/state_transition.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index eea7b18a53..d47f808300 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -6,7 +6,6 @@ import ( tmtypes "github.com/tendermint/tendermint/types" - "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -300,13 +299,6 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t // reset the gas meter for current cosmos transaction k.ResetGasMeterAndConsumeGas(ctx, totalGasUsed) - defer func() { - telemetry.IncrCounter( - float32(refund), - "tx", "msg", "ethereum", "tx_refund", "total", - ) - }() - return res, nil } From d174f2cc746152f3bf938fb6fc54d1c3d52e4c7d Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 12:17:18 +0200 Subject: [PATCH 5/8] analytics(app): update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1027a1f08c..ecfee6d5ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ - (feemarket) [tharsis#1104](https://github.com/tharsis/ethermint/pull/1104) Enforce a minimum gas price for Cosmos and EVM transactions through the `MinGasPrice` parameter. - (rpc) [tharsis#1081](https://github.com/tharsis/ethermint/pull/1081) Deduplicate some json-rpc logic codes, cleanup several dead functions. - (ante) [tharsis#1062](https://github.com/tharsis/ethermint/pull/1062) Emit event of eth tx hash in ante handler to support query failed transactions. +- (analytics) [tharsis#1106](https://github.com/tharsis/ethermint/pull/1106) Update telemetry to Ethermint modules. ### Improvements From 3f487031be83373c7cd650672bbc7fb253d164c3 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 12:21:08 +0200 Subject: [PATCH 6/8] remove unwanted change --- x/evm/keeper/state_transition.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index d47f808300..0372cb7161 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -278,8 +278,7 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t } // refund gas in order to match the Ethereum gas consumption instead of the default SDK one. - refund := msg.Gas() - res.GasUsed - if err = k.RefundGas(ctx, msg, refund, cfg.Params.EvmDenom); err != nil { + if err = k.RefundGas(ctx, msg, msg.Gas()-res.GasUsed, cfg.Params.EvmDenom); err != nil { return nil, sdkerrors.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From()) } @@ -298,7 +297,6 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t // reset the gas meter for current cosmos transaction k.ResetGasMeterAndConsumeGas(ctx, totalGasUsed) - return res, nil } From 40eb9739087f50cd2cdafa4b1a97c3e3fe61e209 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 14:51:04 +0200 Subject: [PATCH 7/8] address PR comments --- x/evm/keeper/msg_server.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index ed1857fd14..1326d1f83b 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -30,17 +30,16 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t tx := msg.AsTransaction() txIndex := k.GetTxIndexTransient(ctx) - labels := []metrics.Label{telemetry.NewLabel("tx_type", fmt.Sprintf("%d", tx.Type()))} + labels := []metrics.Label{ + telemetry.NewLabel("tx_type", fmt.Sprintf("%d", tx.Type())), + telemetry.NewLabel("from", sender), + } if tx.To() == nil { - labels = []metrics.Label{ - telemetry.NewLabel("execution", "create"), - telemetry.NewLabel("from", sender), - } + labels = []metrics.Label{telemetry.NewLabel("execution", "create")} } else { labels = []metrics.Label{ telemetry.NewLabel("execution", "call"), telemetry.NewLabel("to", tx.To().Hex()), // recipient address (contract or account) - telemetry.NewLabel("from", sender), } } @@ -63,11 +62,13 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t labels, ) - gasUsed := sdk.NewDec(int64(response.GasUsed)) - gasRatio, err := gasUsed.QuoInt64(int64(tx.Gas())).Float64() + // Observe which users define a gas limit >> gas used. Note, that gas + // limit is always > 0 + gasLimit := sdk.NewDec(int64(tx.Gas())) + gasRatio, err := gasLimit.QuoInt64(int64(response.GasUsed)).Float64() if err == nil { telemetry.SetGaugeWithLabels( - []string{"tx", "msg", "ethereum_tx", "gas_used", "per", "gas_limit"}, + []string{"tx", "msg", "ethereum_tx", "gas_limit", "per", "gas_used"}, float32(gasRatio), labels, ) From d0a95e300f5b04684916728da4c7badeca103924 Mon Sep 17 00:00:00 2001 From: Daniel Burckhardt Date: Thu, 2 Jun 2022 14:56:39 +0200 Subject: [PATCH 8/8] update comment --- x/evm/keeper/msg_server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index 1326d1f83b..cc893666b3 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -62,8 +62,8 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t labels, ) - // Observe which users define a gas limit >> gas used. Note, that gas - // limit is always > 0 + // Observe which users define a gas limit >> gas used. Note, that + // gas_limit and gas_used are always > 0 gasLimit := sdk.NewDec(int64(tx.Gas())) gasRatio, err := gasLimit.QuoInt64(int64(response.GasUsed)).Float64() if err == nil {