mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 06:36:43 +00:00
pectra HFs: supported EIPs: 2537, 2935, 7623, 7702; disabled EIPs: 7549 7840, 7691, 6110, 7002, 7251, 7685
This commit is contained in:
parent
46119804a5
commit
5a4c85922d
12 changed files with 24 additions and 18 deletions
|
|
@ -362,6 +362,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
|
|||
statedb.AddBalance(w.Address, uint256.MustFromBig(amount), tracing.BalanceIncreaseWithdrawal)
|
||||
}
|
||||
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
// Gather the execution-layer triggered requests.
|
||||
var requests [][]byte
|
||||
if chainConfig.IsPrague(vmContext.BlockNumber) && chainConfig.Bor == nil {
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ func Transaction(ctx *cli.Context) error {
|
|||
continue
|
||||
}
|
||||
// For Prague txs, validate the floor data gas.
|
||||
// EIP-7623
|
||||
if rules.IsPrague {
|
||||
floorDataGas, err := core.FloorDataGas(tx.Data())
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -324,7 +324,8 @@ func (b *BlockGen) collectRequests(readonly bool) (requests [][]byte) {
|
|||
statedb = statedb.Copy()
|
||||
}
|
||||
|
||||
if b.cm.config.IsPrague(b.header.Number) {
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
if b.cm.config.IsPrague(b.header.Number) && b.cm.config.Bor == nil {
|
||||
requests = [][]byte{}
|
||||
// EIP-6110 deposits
|
||||
var blockLogs []*types.Log
|
||||
|
|
|
|||
|
|
@ -539,6 +539,8 @@ func (g *Genesis) toBlockWithRoot(root common.Hash) *types.Block {
|
|||
head.BlobGasUsed = new(uint64)
|
||||
}
|
||||
}
|
||||
|
||||
// Polygon/bor: EIP-7685 not supported
|
||||
if conf.IsPrague(num) && conf.Bor == nil {
|
||||
head.RequestsHash = &types.EmptyRequestsHash
|
||||
}
|
||||
|
|
|
|||
|
|
@ -309,6 +309,7 @@ func (p *ParallelStateProcessor) Process(block *types.Block, statedb *state.Stat
|
|||
ProcessBeaconBlockRoot(*beaconRoot, vmenv)
|
||||
}
|
||||
if p.config.IsPrague(block.Number()) {
|
||||
// EIP-2935
|
||||
ProcessParentBlockHash(block.ParentHash(), vmenv)
|
||||
}
|
||||
// Iterate over and process the individual transactions
|
||||
|
|
@ -398,21 +399,8 @@ func (p *ParallelStateProcessor) Process(block *types.Block, statedb *state.Stat
|
|||
return nil, err
|
||||
}
|
||||
|
||||
// Read requests if Prague is enabled and bor consensus is not active.
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
var requests [][]byte
|
||||
if p.config.IsPrague(block.Number()) && p.config.Bor == nil {
|
||||
// EIP-6110 deposits
|
||||
err := ParseDepositLogs(&requests, allLogs, p.config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// EIP-7002 withdrawals
|
||||
ProcessWithdrawalQueue(&requests, vmenv)
|
||||
|
||||
// EIP-7251 consolidations
|
||||
ProcessConsolidationQueue(&requests, vmenv)
|
||||
}
|
||||
|
||||
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
||||
p.engine.Finalize(p.bc, header, statedb, block.Body())
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
|||
ProcessBeaconBlockRoot(*beaconRoot, evm)
|
||||
}
|
||||
if (p.config.IsPrague(block.Number()) || p.config.IsVerkle(block.Number())) && p.config.Bor == nil {
|
||||
// EIP-2935
|
||||
ProcessParentBlockHash(block.ParentHash(), evm)
|
||||
}
|
||||
|
||||
|
|
@ -117,6 +118,8 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
|||
receipts = append(receipts, receipt)
|
||||
allLogs = append(allLogs, receipt.Logs...)
|
||||
}
|
||||
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
// Read requests if Prague is enabled.
|
||||
var requests [][]byte
|
||||
if p.config.IsPrague(block.Number()) && p.config.Bor == nil {
|
||||
|
|
|
|||
|
|
@ -122,7 +122,8 @@ func ValidateTransaction(tx *types.Transaction, head *types.Header, signer types
|
|||
return fmt.Errorf("%w: gas %v, minimum needed %v", core.ErrIntrinsicGas, tx.Gas(), intrGas)
|
||||
}
|
||||
// Ensure the transaction can cover floor data gas.
|
||||
if opts.Config.IsPrague(head.Number) {
|
||||
// EIP-7623
|
||||
if opts.Config.IsPrague(head.Number) && opts.Config.Bor != nil {
|
||||
floorDataGas, err := core.FloorDataGas(tx.Data())
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -587,6 +587,7 @@ func (evm *EVM) Create2(caller common.Address, code []byte, gas uint64, endowmen
|
|||
// Prague, it can also resolve code pointed to by a delegation designator.
|
||||
func (evm *EVM) resolveCode(addr common.Address) []byte {
|
||||
code := evm.StateDB.GetCode(addr)
|
||||
// EIP-7702
|
||||
if !evm.chainRules.IsPrague {
|
||||
return code
|
||||
}
|
||||
|
|
@ -602,6 +603,7 @@ func (evm *EVM) resolveCode(addr common.Address) []byte {
|
|||
// delegation designator. Although this is not accessible in the EVM it is used
|
||||
// internally to associate jumpdest analysis to code.
|
||||
func (evm *EVM) resolveCodeHash(addr common.Address) common.Hash {
|
||||
// EIP-7702
|
||||
if evm.chainRules.IsPrague {
|
||||
code := evm.StateDB.GetCode(addr)
|
||||
if target, ok := types.ParseDelegation(code); ok {
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ func (eth *Ethereum) stateAtTransaction(ctx context.Context, block *types.Block,
|
|||
core.ProcessBeaconBlockRoot(*beaconRoot, evm)
|
||||
}
|
||||
// If prague hardfork, insert parent block hash in the state as per EIP-2935.
|
||||
if eth.blockchain.Config().IsPrague(block.Number()) {
|
||||
if eth.blockchain.Config().IsPrague(block.Number()) && eth.blockchain.Config().Bor != nil {
|
||||
core.ProcessParentBlockHash(block.ParentHash(), evm)
|
||||
}
|
||||
if txIndex == 0 && len(block.Transactions()) == 0 {
|
||||
|
|
|
|||
|
|
@ -484,6 +484,7 @@ func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed
|
|||
core.ProcessBeaconBlockRoot(*beaconRoot, evm)
|
||||
}
|
||||
// Insert parent hash in history contract.
|
||||
// EIP-2935
|
||||
if api.backend.ChainConfig().IsPrague(next.Number()) {
|
||||
core.ProcessParentBlockHash(next.ParentHash(), evm)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -251,6 +251,7 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header,
|
|||
evm.SetPrecompiles(precompiles)
|
||||
}
|
||||
if sim.chainConfig.IsPrague(header.Number) || sim.chainConfig.IsVerkle(header.Number) {
|
||||
// EIP-2935
|
||||
core.ProcessParentBlockHash(header.ParentHash, evm)
|
||||
}
|
||||
if header.ParentBeaconRoot != nil {
|
||||
|
|
@ -309,9 +310,11 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header,
|
|||
if sim.chainConfig.IsCancun(header.Number) {
|
||||
header.BlobGasUsed = &blobGasUsed
|
||||
}
|
||||
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
var requests [][]byte
|
||||
// Process EIP-7685 requests
|
||||
if sim.chainConfig.IsPrague(header.Number) {
|
||||
if sim.chainConfig.IsPrague(header.Number) && sim.chainConfig.Bor == nil {
|
||||
requests = [][]byte{}
|
||||
// EIP-6110
|
||||
if err := core.ParseDepositLogs(&requests, allLogs, sim.chainConfig); err != nil {
|
||||
|
|
|
|||
|
|
@ -1312,6 +1312,7 @@ func (w *worker) prepareWork(genParams *generateParams, witness bool) (*environm
|
|||
core.ProcessBeaconBlockRoot(*header.ParentBeaconRoot, vmenv)
|
||||
}
|
||||
if w.chainConfig.IsPrague(header.Number) {
|
||||
// EIP-2935
|
||||
context := core.NewEVMBlockContext(header, w.chain, nil)
|
||||
vmenv := vm.NewEVM(context, env.state, w.chainConfig, vm.Config{})
|
||||
core.ProcessParentBlockHash(header.ParentHash, vmenv)
|
||||
|
|
@ -1429,6 +1430,8 @@ func (w *worker) generateWork(params *generateParams, witness bool) *newPayloadR
|
|||
for _, r := range work.receipts {
|
||||
allLogs = append(allLogs, r.Logs...)
|
||||
}
|
||||
|
||||
// Polygon/bor: EIP-6110, EIP-7002, and EIP-7251 are not supported
|
||||
// Collect consensus-layer requests if Prague is enabled and bor consensus is not active.
|
||||
var requests [][]byte
|
||||
if w.chainConfig.IsPrague(work.header.Number) && w.chainConfig.Bor == nil {
|
||||
|
|
|
|||
Loading…
Reference in a new issue