@Override
  public BlockCreationResult createBlock(
      final List<Transaction> transactions,
      final List<BlockHeader> ommers,
      final long timestamp,
      final BlockHeader parentHeader) {
    return createBlock(Optional.of(transactions), Optional.of(ommers), timestamp, parentHeader);
  }
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