eth/catalyst: fill block with txs from txpool if nil transactions

This commit is contained in:
MariusVanDerWijden 2026-02-16 17:54:11 +01:00
parent c654f467d5
commit 0c5ba499c1
3 changed files with 13 additions and 7 deletions

View file

@ -32,12 +32,16 @@ func RegisterTestingAPI(stack *node.Node, backend *eth.Ethereum) error {
return nil 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 { if api.eth.BlockChain().CurrentBlock().Hash() != parentHash {
return nil, errors.New("parentHash is not current head") return nil, errors.New("parentHash is not current head")
} }
dec := make([][]byte, 0, len(transactions)) // If transactions is empty but not nil, build an empty block
for _, tx := range transactions { // 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) dec = append(dec, tx)
} }
txs, err := engine.DecodeTransactions(dec) txs, err := engine.DecodeTransactions(dec)
@ -56,5 +60,5 @@ func (api *TestingAPI) BuildBlockV1(parentHash common.Hash, payloadAttributes en
Withdrawals: payloadAttributes.Withdrawals, Withdrawals: payloadAttributes.Withdrawals,
BeaconRoot: payloadAttributes.BeaconRoot, BeaconRoot: payloadAttributes.BeaconRoot,
} }
return api.eth.Miner().BuildTestingPayload(args, txs, extra) return api.eth.Miner().BuildTestingPayload(args, txs, buildEmpty, extra)
} }

View file

@ -274,7 +274,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload
return payload, nil 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{ fullParams := &generateParams{
timestamp: args.Timestamp, timestamp: args.Timestamp,
forceTime: true, forceTime: true,
@ -283,7 +283,7 @@ func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []*
random: args.Random, random: args.Random,
withdrawals: args.Withdrawals, withdrawals: args.Withdrawals,
beaconRoot: args.BeaconRoot, beaconRoot: args.BeaconRoot,
noTxs: false, noTxs: !empty,
forceOverrides: true, forceOverrides: true,
overrideExtraData: extraData, overrideExtraData: extraData,
overrideTxs: transactions, overrideTxs: transactions,

View file

@ -136,7 +136,9 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay
work.size += uint64(genParam.withdrawals.Size()) work.size += uint64(genParam.withdrawals.Size())
if !genParam.noTxs { 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 { if work.gasPool == nil {
work.gasPool = new(core.GasPool).AddGas(work.header.GasLimit) work.gasPool = new(core.GasPool).AddGas(work.header.GasLimit)
} }