private TransactionSelectionResults selectTransactions(
      final ProcessableBlockHeader processableBlockHeader,
      final MutableWorldState disposableWorldState,
      final Optional<List<Transaction>> transactions,
      final Address miningBeneficiary,
      final ProtocolSpec protocolSpec,
      final PluginTransactionSelector pluginTransactionSelector,
      final SelectorsStateManager selectorsStateManager,
      final BlockHeader parentHeader)
      throws RuntimeException {
    final MainnetTransactionProcessor transactionProcessor = protocolSpec.getTransactionProcessor();

    final AbstractBlockProcessor.TransactionReceiptFactory transactionReceiptFactory =
        protocolSpec.getTransactionReceiptFactory();

    Wei blobGasPrice =
        protocolSpec
            .getFeeMarket()
            .blobGasPricePerGas(calculateExcessBlobGasForParent(protocolSpec, parentHeader));

    final BlockTransactionSelector selector =
        new BlockTransactionSelector(
            miningConfiguration,
            transactionProcessor,
            protocolContext.getBlockchain(),
            disposableWorldState,
            transactionPool,
            processableBlockHeader,
            transactionReceiptFactory,
            isCancelled::get,
            miningBeneficiary,
            blobGasPrice,
            protocolSpec.getFeeMarket(),
            protocolSpec.getGasCalculator(),
            protocolSpec.getGasLimitCalculator(),
            protocolSpec.getBlockHashProcessor(),
            pluginTransactionSelector,
            ethScheduler,
            selectorsStateManager);

    if (transactions.isPresent()) {
      return selector.evaluateTransactions(transactions.get());
    } else {
      return selector.buildTransactionListForBlock();
    }
  }
Create block will create a new block at the head of the blockchain specified in the
protocolContext.

<p>It will select transactions from the PendingTransaction list for inclusion in the Block
body, and will supply an empty Ommers list.

<p>Once transactions have been selected and applied to a disposable/temporary world state, the
block reward is paid to the relevant coinbase, and a sealable header is constructed.

<p>The sealableHeader is then provided to child instances for sealing (i.e. proof of work or
otherwise).

<p>The constructed block is then returned.

@return a block with appropriately selected transactions, seals and ommers.
ethereum/blockcreation/src/main/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreator.java