mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 03:30:37 +00:00
eip-4844: ApplyTransaction now expects excessDataGas (#7233)
Tiny addition to ApplyTransaction. Now it expects excessDataGas param so the BlockContext can be created with it
This commit is contained in:
parent
77fcc58400
commit
d67087f7fd
@ -729,7 +729,7 @@ func (b *SimulatedBackend) SendTransaction(ctx context.Context, tx types.Transac
|
||||
&b.pendingHeader.Coinbase, b.gasPool,
|
||||
b.pendingState, state.NewNoopWriter(),
|
||||
b.pendingHeader, tx,
|
||||
&b.pendingHeader.GasUsed, vm.Config{}); err != nil {
|
||||
&b.pendingHeader.GasUsed, vm.Config{}, nil /*excessDataGas*/); err != nil {
|
||||
return err
|
||||
}
|
||||
//fmt.Printf("==== Start producing block %d\n", (b.prependBlock.NumberU64() + 1))
|
||||
|
@ -523,7 +523,7 @@ func (b *blockProcessor) applyBlock(
|
||||
ibs.Prepare(tx.Hash(), block.Hash(), i)
|
||||
ct := exec3.NewCallTracer()
|
||||
b.vmConfig.Tracer = ct
|
||||
receipt, _, err := core.ApplyTransaction(b.chainConfig, getHashFn, b.engine, nil, gp, ibs, b.writer, header, tx, usedGas, b.vmConfig)
|
||||
receipt, _, err := core.ApplyTransaction(b.chainConfig, getHashFn, b.engine, nil, gp, ibs, b.writer, header, tx, usedGas, b.vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not apply tx %d [%x] failed: %w", i, tx.Hash(), err)
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ func (api *BaseAPI) getReceipts(ctx context.Context, tx kv.Tx, chainConfig *chai
|
||||
for i, txn := range block.Transactions() {
|
||||
ibs.Prepare(txn.Hash(), block.Hash(), i)
|
||||
header := block.Header()
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, noopWriter, header, txn, usedGas, vm.Config{})
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, noopWriter, header, txn, usedGas, vm.Config{}, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -418,7 +418,7 @@ func processBlock23(startTxNum uint64, trace bool, txNumStart uint64, rw *StateR
|
||||
ibs.Prepare(tx.Hash(), block.Hash(), i)
|
||||
ct := exec3.NewCallTracer()
|
||||
vmConfig.Tracer = ct
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, getHashFn, engine, nil, gp, ibs, ww, header, tx, usedGas, vmConfig)
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, getHashFn, engine, nil, gp, ibs, ww, header, tx, usedGas, vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return 0, nil, fmt.Errorf("could not apply tx %d [%x] failed: %w", i, tx.Hash(), err)
|
||||
}
|
||||
|
@ -256,7 +256,7 @@ func runHistory22(trace bool, blockNum, txNumStart uint64, hw *state.HistoryRead
|
||||
hw.SetTxNum(txNum)
|
||||
ibs := state.New(hw)
|
||||
ibs.Prepare(tx.Hash(), block.Hash(), i)
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, ww, header, tx, usedGas, vmConfig)
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, ww, header, tx, usedGas, vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return 0, nil, fmt.Errorf("could not apply tx %d [%x] failed: %w", i, tx.Hash(), err)
|
||||
}
|
||||
|
@ -714,7 +714,7 @@ func runBlock(engine consensus.Engine, ibs *state.IntraBlockState, txnWriter sta
|
||||
rules := chainConfig.Rules(block.NumberU64(), block.Time())
|
||||
for i, tx := range block.Transactions() {
|
||||
ibs.Prepare(tx.Hash(), block.Hash(), i)
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, txnWriter, header, tx, usedGas, vmConfig)
|
||||
receipt, _, err := core.ApplyTransaction(chainConfig, core.GetHashFn(header, getHeader), engine, nil, gp, ibs, txnWriter, header, tx, usedGas, vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not apply tx %d [%x] failed: %w", i, tx.Hash(), err)
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ func ExecuteBlockEphemerallyForBSC(
|
||||
writeTrace = true
|
||||
}
|
||||
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig)
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig, nil /*excessDataGas*/)
|
||||
if writeTrace {
|
||||
if ftracer, ok := vmConfig.Tracer.(vm.FlushableTracer); ok {
|
||||
ftracer.Flush(tx)
|
||||
@ -272,7 +272,7 @@ func ExecuteBlockEphemerally(
|
||||
writeTrace = true
|
||||
}
|
||||
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig)
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig, nil /*excessDataGas*/)
|
||||
if writeTrace {
|
||||
if ftracer, ok := vmConfig.Tracer.(vm.FlushableTracer); ok {
|
||||
ftracer.Flush(tx)
|
||||
@ -383,7 +383,7 @@ func ExecuteBlockEphemerallyBor(
|
||||
writeTrace = true
|
||||
}
|
||||
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig)
|
||||
receipt, _, err := ApplyTransaction(chainConfig, blockHashFunc, engine, nil, gp, ibs, noop, header, tx, usedGas, *vmConfig, nil /*excessDataGas*/)
|
||||
if writeTrace {
|
||||
if ftracer, ok := vmConfig.Tracer.(vm.FlushableTracer); ok {
|
||||
ftracer.Flush(tx)
|
||||
@ -557,7 +557,7 @@ func CallContract(contract libcommon.Address, data []byte, chainConfig chain.Con
|
||||
return nil, fmt.Errorf("SysCallContract: %w ", err)
|
||||
}
|
||||
vmConfig := vm.Config{NoReceipts: true}
|
||||
_, result, err = ApplyTransaction(&chainConfig, GetHashFn(header, nil), engine, &state.SystemAddress, gp, ibs, noop, header, tx, &gasUsed, vmConfig)
|
||||
_, result, err = ApplyTransaction(&chainConfig, GetHashFn(header, nil), engine, &state.SystemAddress, gp, ibs, noop, header, tx, &gasUsed, vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
return result, fmt.Errorf("SysCallContract: %w ", err)
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ func (b *BlockGen) AddTxWithChain(getHeader func(hash libcommon.Hash, number uin
|
||||
b.SetCoinbase(libcommon.Address{})
|
||||
}
|
||||
b.ibs.Prepare(tx.Hash(), libcommon.Hash{}, len(b.txs))
|
||||
receipt, _, err := ApplyTransaction(b.config, GetHashFn(b.header, getHeader), engine, &b.header.Coinbase, b.gasPool, b.ibs, state.NewNoopWriter(), b.header, tx, &b.header.GasUsed, vm.Config{})
|
||||
receipt, _, err := ApplyTransaction(b.config, GetHashFn(b.header, getHeader), engine, &b.header.Coinbase, b.gasPool, b.ibs, state.NewNoopWriter(), b.header, tx, &b.header.GasUsed, vm.Config{}, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -130,7 +130,7 @@ func (b *BlockGen) AddFailedTxWithChain(getHeader func(hash libcommon.Hash, numb
|
||||
b.SetCoinbase(libcommon.Address{})
|
||||
}
|
||||
b.ibs.Prepare(tx.Hash(), libcommon.Hash{}, len(b.txs))
|
||||
receipt, _, err := ApplyTransaction(b.config, GetHashFn(b.header, getHeader), engine, &b.header.Coinbase, b.gasPool, b.ibs, state.NewNoopWriter(), b.header, tx, &b.header.GasUsed, vm.Config{})
|
||||
receipt, _, err := ApplyTransaction(b.config, GetHashFn(b.header, getHeader), engine, &b.header.Coinbase, b.gasPool, b.ibs, state.NewNoopWriter(), b.header, tx, &b.header.GasUsed, vm.Config{}, nil /*excessDataGas*/)
|
||||
_ = err // accept failed transactions
|
||||
b.txs = append(b.txs, tx)
|
||||
b.receipts = append(b.receipts, receipt)
|
||||
|
@ -17,6 +17,8 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
|
||||
"github.com/ledgerwatch/erigon-lib/chain"
|
||||
libcommon "github.com/ledgerwatch/erigon-lib/common"
|
||||
|
||||
@ -97,14 +99,14 @@ func applyTransaction(config *chain.Config, engine consensus.EngineReader, gp *G
|
||||
// and uses the input parameters for its environment. It returns the receipt
|
||||
// for the transaction, gas used and an error if the transaction failed,
|
||||
// indicating the block was invalid.
|
||||
func ApplyTransaction(config *chain.Config, blockHashFunc func(n uint64) libcommon.Hash, engine consensus.EngineReader, author *libcommon.Address, gp *GasPool, ibs *state.IntraBlockState, stateWriter state.StateWriter, header *types.Header, tx types.Transaction, usedGas *uint64, cfg vm.Config) (*types.Receipt, []byte, error) {
|
||||
func ApplyTransaction(config *chain.Config, blockHashFunc func(n uint64) libcommon.Hash, engine consensus.EngineReader, author *libcommon.Address, gp *GasPool, ibs *state.IntraBlockState, stateWriter state.StateWriter, header *types.Header, tx types.Transaction, usedGas *uint64, cfg vm.Config, excessDataGas *big.Int) (*types.Receipt, []byte, error) {
|
||||
// Create a new context to be used in the EVM environment
|
||||
|
||||
// Add addresses to access list if applicable
|
||||
// about the transaction and calling mechanisms.
|
||||
cfg.SkipAnalysis = SkipAnalysis(config, header.Number.Uint64())
|
||||
|
||||
blockContext := NewEVMBlockContext(header, blockHashFunc, engine, author, nil /*excessDataGas*/)
|
||||
blockContext := NewEVMBlockContext(header, blockHashFunc, engine, author, excessDataGas)
|
||||
vmenv := vm.NewEVM(blockContext, evmtypes.TxContext{}, ibs, config, cfg)
|
||||
|
||||
return applyTransaction(config, engine, gp, ibs, stateWriter, header, tx, usedGas, vmenv, cfg)
|
||||
|
@ -96,7 +96,8 @@ type Header struct {
|
||||
|
||||
BaseFee *big.Int `json:"baseFeePerGas"` // EIP-1559
|
||||
WithdrawalsHash *libcommon.Hash `json:"withdrawalsRoot"` // EIP-4895
|
||||
ExcessDataGas *big.Int `json:"excessDataGas"` // EIP-4844
|
||||
// ExcessDataGas was added by EIP-4844 and is ignored in legacy headers.
|
||||
ExcessDataGas *big.Int `json:"excessDataGas"`
|
||||
|
||||
// The verkle proof is ignored in legacy headers
|
||||
Verkle bool
|
||||
|
@ -381,7 +381,7 @@ func addTransactionsToMiningBlock(logPrefix string, current *MiningBlock, chainC
|
||||
gasSnap := gasPool.Gas()
|
||||
snap := ibs.Snapshot()
|
||||
log.Debug("addTransactionsToMiningBlock", "txn hash", txn.Hash())
|
||||
receipt, _, err := core.ApplyTransaction(&chainConfig, core.GetHashFn(header, getHeader), engine, &coinbase, gasPool, ibs, noop, header, txn, &header.GasUsed, *vmConfig)
|
||||
receipt, _, err := core.ApplyTransaction(&chainConfig, core.GetHashFn(header, getHeader), engine, &coinbase, gasPool, ibs, noop, header, txn, &header.GasUsed, *vmConfig, nil /*excessDataGas*/)
|
||||
if err != nil {
|
||||
ibs.RevertToSnapshot(snap)
|
||||
gasPool = new(core.GasPool).AddGas(gasSnap) // restore gasPool as well as ibs
|
||||
|
Loading…
Reference in New Issue
Block a user