From 5a4c85922df497126813b2b40a8fc26f5f4bc0bd Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Fri, 16 May 2025 09:43:31 +0530 Subject: [PATCH] pectra HFs: supported EIPs: 2537, 2935, 7623, 7702; disabled EIPs: 7549 7840, 7691, 6110, 7002, 7251, 7685 --- cmd/evm/internal/t8ntool/execution.go | 1 + cmd/evm/internal/t8ntool/transaction.go | 1 + core/chain_makers.go | 3 ++- core/genesis.go | 2 ++ core/parallel_state_processor.go | 16 ++-------------- core/state_processor.go | 3 +++ core/txpool/validation.go | 3 ++- core/vm/evm.go | 2 ++ eth/state_accessor.go | 2 +- eth/tracers/api.go | 1 + internal/ethapi/simulate.go | 5 ++++- miner/worker.go | 3 +++ 12 files changed, 24 insertions(+), 18 deletions(-) diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 84c4db511c..c6f19160ca 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -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 { diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index 567d99d882..3357296f8a 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -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 { diff --git a/core/chain_makers.go b/core/chain_makers.go index fbe8af3feb..13ccd5796e 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -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 diff --git a/core/genesis.go b/core/genesis.go index bdb0da17d0..b105cc7eac 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -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 } diff --git a/core/parallel_state_processor.go b/core/parallel_state_processor.go index 63b434fbde..62fcc6a97c 100644 --- a/core/parallel_state_processor.go +++ b/core/parallel_state_processor.go @@ -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()) diff --git a/core/state_processor.go b/core/state_processor.go index 8890ca8d4b..9a3088a4d1 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -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 { diff --git a/core/txpool/validation.go b/core/txpool/validation.go index 967ff78dd4..da2ed01e62 100644 --- a/core/txpool/validation.go +++ b/core/txpool/validation.go @@ -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 diff --git a/core/vm/evm.go b/core/vm/evm.go index 04388dac0b..14e88d5c43 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -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 { diff --git a/eth/state_accessor.go b/eth/state_accessor.go index 111ea70469..62501bab11 100644 --- a/eth/state_accessor.go +++ b/eth/state_accessor.go @@ -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 { diff --git a/eth/tracers/api.go b/eth/tracers/api.go index cc8700377f..f9d13315b4 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -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) } diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index e0caf6539d..f8357b5ea0 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -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 { diff --git a/miner/worker.go b/miner/worker.go index 83dec33cae..259139f215 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -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 {