From 56c4a31f1055157565a391348234d484c981864c Mon Sep 17 00:00:00 2001 From: Thomas Nguy <81727899+thomas-nguy@users.noreply.github.com> Date: Wed, 6 Apr 2022 00:38:18 +0900 Subject: [PATCH] evm: allow to append logs after a post processing hook (#1025) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add log after tx post processing hook add changelog fix tests rename variable minimum change version * Update x/evm/keeper/state_transition.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> --- CHANGELOG.md | 4 +++ x/evm/keeper/state_transition.go | 61 ++++++++++++++++---------------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef63ba0d..de73eae5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (feemarket) [tharsis#1021](https://github.com/tharsis/ethermint/pull/1021) Fix fee market migration. +### Improvements + +* (evm) [tharsis#1025](https://github.com/tharsis/ethermint/pull/1025) Allow to append logs after a post processing hook. + ## [v0.12.1] - 2022-03-29 ### Bug Fixes diff --git a/x/evm/keeper/state_transition.go b/x/evm/keeper/state_transition.go index 4a3d1361..abd8c29e 100644 --- a/x/evm/keeper/state_transition.go +++ b/x/evm/keeper/state_transition.go @@ -235,34 +235,34 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t bloomReceipt = ethtypes.BytesToBloom(bloom.Bytes()) } + cumulativeGasUsed := res.GasUsed + if ctx.BlockGasMeter() != nil { + limit := ctx.BlockGasMeter().Limit() + consumed := ctx.BlockGasMeter().GasConsumed() + cumulativeGasUsed = uint64(math.Min(float64(cumulativeGasUsed+consumed), float64(limit))) + } + + var contractAddr common.Address + if msg.To() == nil { + contractAddr = crypto.CreateAddress(msg.From(), msg.Nonce()) + } + + receipt := ðtypes.Receipt{ + Type: tx.Type(), + PostState: nil, // TODO: intermediate state root + CumulativeGasUsed: cumulativeGasUsed, + Bloom: bloomReceipt, + Logs: logs, + TxHash: txConfig.TxHash, + ContractAddress: contractAddr, + GasUsed: res.GasUsed, + BlockHash: txConfig.BlockHash, + BlockNumber: big.NewInt(ctx.BlockHeight()), + TransactionIndex: txConfig.TxIndex, + } + if !res.Failed() { - cumulativeGasUsed := res.GasUsed - if ctx.BlockGasMeter() != nil { - limit := ctx.BlockGasMeter().Limit() - consumed := ctx.BlockGasMeter().GasConsumed() - cumulativeGasUsed = uint64(math.Min(float64(cumulativeGasUsed+consumed), float64(limit))) - } - - var contractAddr common.Address - if msg.To() == nil { - contractAddr = crypto.CreateAddress(msg.From(), msg.Nonce()) - } - - receipt := ðtypes.Receipt{ - Type: tx.Type(), - PostState: nil, // TODO: intermediate state root - Status: ethtypes.ReceiptStatusSuccessful, - CumulativeGasUsed: cumulativeGasUsed, - Bloom: bloomReceipt, - Logs: logs, - TxHash: txConfig.TxHash, - ContractAddress: contractAddr, - GasUsed: res.GasUsed, - BlockHash: txConfig.BlockHash, - BlockNumber: big.NewInt(ctx.BlockHeight()), - TransactionIndex: txConfig.TxIndex, - } - + receipt.Status = ethtypes.ReceiptStatusSuccessful // Only call hooks if tx executed successfully. if err = k.PostTxProcessing(tmpCtx, msg, receipt); err != nil { // If hooks return error, revert the whole tx. @@ -280,11 +280,10 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t return nil, sdkerrors.Wrapf(err, "failed to refund gas leftover gas to sender %s", msg.From()) } - if len(logs) > 0 { + if len(receipt.Logs) > 0 { // Update transient block bloom filter - k.SetBlockBloomTransient(ctx, bloom) - - k.SetLogSizeTransient(ctx, uint64(txConfig.LogIndex)+uint64(len(logs))) + k.SetBlockBloomTransient(ctx, receipt.Bloom.Big()) + k.SetLogSizeTransient(ctx, uint64(txConfig.LogIndex)+uint64(len(receipt.Logs))) } k.SetTxIndexTransient(ctx, uint64(txConfig.TxIndex)+1)