From a6c89c1cff5f98eb6d64044e4d9d45d94a246237 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Wed, 26 Mar 2025 11:14:24 +0530 Subject: [PATCH] miner: handle requests in block building --- miner/worker.go | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 2e3c9248a3..d9afcbb3dd 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -526,7 +526,7 @@ func (w *worker) newWorkLoop(recommit time.Duration) { commit(false, commitInterruptNewHead) case head := <-w.chainHeadCh: - clearPending(head.Block.NumberU64()) + clearPending(head.Header.Number.Uint64()) timestamp = time.Now().Unix() commit(false, commitInterruptNewHead) @@ -1410,13 +1410,28 @@ func (w *worker) generateWork(params *generateParams, witness bool) *newPayloadR for _, r := range work.receipts { allLogs = append(allLogs, r.Logs...) } - // Read requests if Prague is enabled. - if w.chainConfig.IsPrague(work.header.Number) && w.chainConfig.Bor == nil { - requests, err := core.ParseDepositLogs(allLogs, w.chainConfig) + // Collect consensus-layer requests if Prague is enabled. + var requests [][]byte + if w.chainConfig.IsPrague(work.header.Number) { + // EIP-6110 deposits + depositRequests, err := core.ParseDepositLogs(allLogs, w.chainConfig) if err != nil { return &newPayloadResult{err: err} } - body.Requests = requests + requests = append(requests, depositRequests) + // create EVM for system calls + blockContext := core.NewEVMBlockContext(work.header, w.chain, &work.header.Coinbase) + vmenv := vm.NewEVM(blockContext, vm.TxContext{}, work.state, w.chainConfig, vm.Config{}) + // EIP-7002 withdrawals + withdrawalRequests := core.ProcessWithdrawalQueue(vmenv, work.state) + requests = append(requests, withdrawalRequests) + // EIP-7251 consolidations + consolidationRequests := core.ProcessConsolidationQueue(vmenv, work.state) + requests = append(requests, consolidationRequests) + } + if requests != nil { + reqHash := types.CalcRequestsHash(requests) + work.header.RequestsHash = &reqHash } block, err := w.engine.FinalizeAndAssemble(w.chain, work.header, work.state, &body, work.receipts)