eip-4844: NewEVMBlockContext now expects excessDataGas (#7203)

Small change in core.NewEVMBlockContext and now it expects
excessDataGas. This will be used in state transition to compute data fee
for eip-4844 data blobs. The logic that computes it will be added in the
next PRs.
This commit is contained in:
racytech 2023-03-29 12:39:36 +06:00 committed by GitHub
parent 3ce1b9b5ce
commit 975e38a800
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 14 additions and 14 deletions

View File

@ -683,7 +683,7 @@ func (b *SimulatedBackend) callContract(_ context.Context, call ethereum.CallMsg
txContext := core.NewEVMTxContext(msg) txContext := core.NewEVMTxContext(msg)
header := block.Header() header := block.Header()
evmContext := core.NewEVMBlockContext(header, core.GetHashFn(header, b.getHeader), b.m.Engine, nil) evmContext := core.NewEVMBlockContext(header, core.GetHashFn(header, b.getHeader), b.m.Engine, nil, nil /*excessDataGas*/)
// Create a new environment which holds all relevant information // Create a new environment which holds all relevant information
// about the transaction and calling mechanisms. // about the transaction and calling mechanisms.
vmEnv := vm.NewEVM(evmContext, txContext, statedb, b.m.ChainConfig, vm.Config{}) vmEnv := vm.NewEVM(evmContext, txContext, statedb, b.m.ChainConfig, vm.Config{})

View File

@ -88,7 +88,7 @@ func (api *OtterscanAPIImpl) genericTracer(dbtx kv.Tx, ctx context.Context, bloc
msg, _ := tx.AsMessage(*signer, header.BaseFee, rules) msg, _ := tx.AsMessage(*signer, header.BaseFee, rules)
BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil) BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil, nil /*excessDataGas*/)
TxContext := core.NewEVMTxContext(msg) TxContext := core.NewEVMTxContext(msg)
vmenv := vm.NewEVM(BlockContext, TxContext, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer}) vmenv := vm.NewEVM(BlockContext, TxContext, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer})

View File

@ -85,7 +85,7 @@ func (api *OtterscanAPIImpl) traceBlock(dbtx kv.Tx, ctx context.Context, blockNu
msg, _ := tx.AsMessage(*signer, header.BaseFee, rules) msg, _ := tx.AsMessage(*signer, header.BaseFee, rules)
tracer := NewTouchTracer(searchAddr) tracer := NewTouchTracer(searchAddr)
BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil) BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil, nil /*excessDataGas*/)
TxContext := core.NewEVMTxContext(msg) TxContext := core.NewEVMTxContext(msg)
vmenv := vm.NewEVM(BlockContext, TxContext, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer}) vmenv := vm.NewEVM(BlockContext, TxContext, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer})

View File

@ -207,7 +207,7 @@ func (rw *Worker) RunTxTaskNoLock(txTask *exec22.TxTask) {
blockContext := txTask.EvmBlockContext blockContext := txTask.EvmBlockContext
if !rw.background { if !rw.background {
getHashFn := core.GetHashFn(header, rw.getHeader) getHashFn := core.GetHashFn(header, rw.getHeader)
blockContext = core.NewEVMBlockContext(header, getHashFn, rw.engine, nil /* author */) blockContext = core.NewEVMBlockContext(header, getHashFn, rw.engine, nil /* author */, nil /*excessDataGas*/)
} }
rw.evm.ResetBetweenBlocks(blockContext, core.NewEVMTxContext(msg), ibs, vmConfig, rules) rw.evm.ResetBetweenBlocks(blockContext, core.NewEVMTxContext(msg), ibs, vmConfig, rules)
vmenv := rw.evm vmenv := rw.evm

View File

@ -1262,7 +1262,7 @@ func (p *Parlia) systemCall(from, contract libcommon.Address, data []byte, ibs *
) )
vmConfig := vm.Config{NoReceipts: true} vmConfig := vm.Config{NoReceipts: true}
// Create a new context to be used in the EVM environment // Create a new context to be used in the EVM environment
blockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, nil), p, &from) blockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, nil), p, &from, nil /*excessDataGas*/)
evm := vm.NewEVM(blockContext, core.NewEVMTxContext(msg), ibs, chainConfig, vmConfig) evm := vm.NewEVM(blockContext, core.NewEVMTxContext(msg), ibs, chainConfig, vmConfig)
ret, leftOverGas, err := evm.Call( ret, leftOverGas, err := evm.Call(
vm.AccountRef(msg.From()), vm.AccountRef(msg.From()),

View File

@ -493,7 +493,7 @@ func SysCallContract(contract libcommon.Address, data []byte, chainConfig chain.
author = &state.SystemAddress author = &state.SystemAddress
txContext = NewEVMTxContext(msg) txContext = NewEVMTxContext(msg)
} }
blockContext := NewEVMBlockContext(header, GetHashFn(header, nil), engine, author) blockContext := NewEVMBlockContext(header, GetHashFn(header, nil), engine, author, nil /*excessDataGas*/)
evm := vm.NewEVM(blockContext, txContext, ibs, &chainConfig, vmConfig) evm := vm.NewEVM(blockContext, txContext, ibs, &chainConfig, vmConfig)
ret, _, err := evm.Call( ret, _, err := evm.Call(
@ -529,7 +529,7 @@ func SysCreate(contract libcommon.Address, data []byte, chainConfig chain.Config
// Create a new context to be used in the EVM environment // Create a new context to be used in the EVM environment
author := &contract author := &contract
txContext := NewEVMTxContext(msg) txContext := NewEVMTxContext(msg)
blockContext := NewEVMBlockContext(header, GetHashFn(header, nil), nil, author) blockContext := NewEVMBlockContext(header, GetHashFn(header, nil), nil, author, nil /*excessDataGas*/)
evm := vm.NewEVM(blockContext, txContext, ibs, &chainConfig, vmConfig) evm := vm.NewEVM(blockContext, txContext, ibs, &chainConfig, vmConfig)
ret, _, err := evm.SysCreate( ret, _, err := evm.SysCreate(

View File

@ -31,7 +31,7 @@ import (
) )
// NewEVMBlockContext creates a new context for use in the EVM. // NewEVMBlockContext creates a new context for use in the EVM.
func NewEVMBlockContext(header *types.Header, blockHashFunc func(n uint64) libcommon.Hash, engine consensus.EngineReader, author *libcommon.Address) evmtypes.BlockContext { func NewEVMBlockContext(header *types.Header, blockHashFunc func(n uint64) libcommon.Hash, engine consensus.EngineReader, author *libcommon.Address, excessDataGas *big.Int) evmtypes.BlockContext {
// If we don't have an explicit author (i.e. not mining), extract from the header // If we don't have an explicit author (i.e. not mining), extract from the header
var beneficiary libcommon.Address var beneficiary libcommon.Address
if author == nil { if author == nil {

View File

@ -104,7 +104,7 @@ func ApplyTransaction(config *chain.Config, blockHashFunc func(n uint64) libcomm
// about the transaction and calling mechanisms. // about the transaction and calling mechanisms.
cfg.SkipAnalysis = SkipAnalysis(config, header.Number.Uint64()) cfg.SkipAnalysis = SkipAnalysis(config, header.Number.Uint64())
blockContext := NewEVMBlockContext(header, blockHashFunc, engine, author) blockContext := NewEVMBlockContext(header, blockHashFunc, engine, author, nil /*excessDataGas*/)
vmenv := vm.NewEVM(blockContext, evmtypes.TxContext{}, ibs, config, cfg) vmenv := vm.NewEVM(blockContext, evmtypes.TxContext{}, ibs, config, cfg)
return applyTransaction(config, engine, gp, ibs, stateWriter, header, tx, usedGas, vmenv, cfg) return applyTransaction(config, engine, gp, ibs, stateWriter, header, tx, usedGas, vmenv, cfg)

View File

@ -545,7 +545,7 @@ Loop:
defer getHashFnMute.Unlock() defer getHashFnMute.Unlock()
return f(n) return f(n)
} }
blockContext := core.NewEVMBlockContext(header, getHashFn, engine, nil /* author */) blockContext := core.NewEVMBlockContext(header, getHashFn, engine, nil /* author */, nil /*excessDataGas*/)
if parallel { if parallel {
select { select {
@ -1057,7 +1057,7 @@ func reconstituteStep(last bool,
defer getHashFnMute.Unlock() defer getHashFnMute.Unlock()
return f(n) return f(n)
} }
blockContext := core.NewEVMBlockContext(header, getHashFn, engine, nil /* author */) blockContext := core.NewEVMBlockContext(header, getHashFn, engine, nil /* author */, nil /*excessDataGas*/)
rules := chainConfig.Rules(bn, b.Time()) rules := chainConfig.Rules(bn, b.Time())
for txIndex := -1; txIndex <= len(txs); txIndex++ { for txIndex := -1; txIndex <= len(txs); txIndex++ {

View File

@ -221,7 +221,7 @@ func (t *StateTest) RunNoVerify(tx kv.RwTx, subtest StateSubtest, vmconfig vm.Co
// Prepare the EVM. // Prepare the EVM.
txContext := core.NewEVMTxContext(msg) txContext := core.NewEVMTxContext(msg)
header := block.Header() header := block.Header()
context := core.NewEVMBlockContext(header, core.GetHashFn(header, nil), nil, &t.json.Env.Coinbase) context := core.NewEVMBlockContext(header, core.GetHashFn(header, nil), nil, &t.json.Env.Coinbase, nil /*excessDataGas*/)
context.GetHash = vmTestBlockHash context.GetHash = vmTestBlockHash
if baseFee != nil { if baseFee != nil {
context.BaseFee = new(uint256.Int) context.BaseFee = new(uint256.Int)

View File

@ -107,7 +107,7 @@ func DoCall(
} }
func NewEVMBlockContext(engine consensus.EngineReader, header *types.Header, requireCanonical bool, tx kv.Tx, headerReader services.HeaderReader) evmtypes.BlockContext { func NewEVMBlockContext(engine consensus.EngineReader, header *types.Header, requireCanonical bool, tx kv.Tx, headerReader services.HeaderReader) evmtypes.BlockContext {
return core.NewEVMBlockContext(header, MakeHeaderGetter(requireCanonical, tx, headerReader), engine, nil /* author */) return core.NewEVMBlockContext(header, MakeHeaderGetter(requireCanonical, tx, headerReader), engine, nil /* author */, nil /*excessDataGas*/)
} }
func MakeHeaderGetter(requireCanonical bool, tx kv.Tx, headerReader services.HeaderReader) func(uint64) libcommon.Hash { func MakeHeaderGetter(requireCanonical bool, tx kv.Tx, headerReader services.HeaderReader) func(uint64) libcommon.Hash {

View File

@ -53,7 +53,7 @@ func ComputeTxEnv(ctx context.Context, engine consensus.EngineReader, block *typ
return h return h
} }
header := block.HeaderNoCopy() header := block.HeaderNoCopy()
BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil) BlockContext := core.NewEVMBlockContext(header, core.GetHashFn(header, getHeader), engine, nil, nil /*excessDataGas*/)
// Recompute transactions up to the target index. // Recompute transactions up to the target index.
signer := types.MakeSigner(cfg, block.NumberU64()) signer := types.MakeSigner(cfg, block.NumberU64())