From 0c5ba499c16d1906db8c9812b724dbe16114b381 Mon Sep 17 00:00:00 2001 From: MariusVanDerWijden Date: Mon, 16 Feb 2026 17:54:11 +0100 Subject: [PATCH] eth/catalyst: fill block with txs from txpool if nil transactions --- eth/catalyst/api_testing.go | 12 ++++++++---- miner/payload_building.go | 4 ++-- miner/worker.go | 4 +++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/eth/catalyst/api_testing.go b/eth/catalyst/api_testing.go index 87cceaf48f..121a7398a6 100644 --- a/eth/catalyst/api_testing.go +++ b/eth/catalyst/api_testing.go @@ -32,12 +32,16 @@ func RegisterTestingAPI(stack *node.Node, backend *eth.Ethereum) error { return nil } -func (api *TestingAPI) BuildBlockV1(parentHash common.Hash, payloadAttributes engine.PayloadAttributes, transactions []hexutil.Bytes, extraData *hexutil.Bytes) (*engine.ExecutionPayloadEnvelope, error) { +func (api *TestingAPI) BuildBlockV1(parentHash common.Hash, payloadAttributes engine.PayloadAttributes, transactions *[]hexutil.Bytes, extraData *hexutil.Bytes) (*engine.ExecutionPayloadEnvelope, error) { if api.eth.BlockChain().CurrentBlock().Hash() != parentHash { return nil, errors.New("parentHash is not current head") } - dec := make([][]byte, 0, len(transactions)) - for _, tx := range transactions { + // If transactions is empty but not nil, build an empty block + // If the transactions is nil, build a block with the current transactions from the txpool + // If the transactions is not nil and not empty, build a block with the transactions + buildEmpty := transactions != nil && len(*transactions) == 0 + dec := make([][]byte, 0, len(*transactions)) + for _, tx := range *transactions { dec = append(dec, tx) } txs, err := engine.DecodeTransactions(dec) @@ -56,5 +60,5 @@ func (api *TestingAPI) BuildBlockV1(parentHash common.Hash, payloadAttributes en Withdrawals: payloadAttributes.Withdrawals, BeaconRoot: payloadAttributes.BeaconRoot, } - return api.eth.Miner().BuildTestingPayload(args, txs, extra) + return api.eth.Miner().BuildTestingPayload(args, txs, buildEmpty, extra) } diff --git a/miner/payload_building.go b/miner/payload_building.go index 35e450f3e7..f876bd1841 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -274,7 +274,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload return payload, nil } -func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []*types.Transaction, extraData []byte) (*engine.ExecutionPayloadEnvelope, error) { +func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []*types.Transaction, empty bool, extraData []byte) (*engine.ExecutionPayloadEnvelope, error) { fullParams := &generateParams{ timestamp: args.Timestamp, forceTime: true, @@ -283,7 +283,7 @@ func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []* random: args.Random, withdrawals: args.Withdrawals, beaconRoot: args.BeaconRoot, - noTxs: false, + noTxs: !empty, forceOverrides: true, overrideExtraData: extraData, overrideTxs: transactions, diff --git a/miner/worker.go b/miner/worker.go index 8aa3da2553..9e2140bd04 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -136,7 +136,9 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay work.size += uint64(genParam.withdrawals.Size()) if !genParam.noTxs { - if genParam.forceOverrides { + // If forceOverrides is true and overrideTxs is not empty, commit the override transactions + // otherwise, fill the block with the current transactions from the txpool + if genParam.forceOverrides && len(genParam.overrideTxs) > 0 { if work.gasPool == nil { work.gasPool = new(core.GasPool).AddGas(work.header.GasLimit) }