evm: allow to append logs after a post processing hook (#1025)
* 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>
This commit is contained in:
parent
7d11c93992
commit
56c4a31f10
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user