public BlockCreationResult createBlock(
      final BlockHeader parentHeader,
      final List<Transaction> transactions,
      final List<BlockHeader> ommers) {
    final BlockCreator blockCreator = this.blockCreatorFactory.apply(parentHeader);
    final long timestamp = scheduler.getNextTimestamp(parentHeader).timestampForHeader();
    return blockCreator.createBlock(transactions, ommers, timestamp, parentHeader);
  }
Create a block with the given transactions and ommers. The list of transactions are validated
as they are processed, and are not guaranteed to be included in the final block. If
transactions must match exactly, the caller must verify they were all able to be included.

@param parentHeader The header of the parent of the block to be produced
@param transactions The list of transactions which may be included.
@param ommers The list of ommers to include.
@return the newly created block.
ethereum/blockcreation/src/main/java/org/hyperledger/besu/ethereum/blockcreation/BlockMiner.java