code: def build_block_with_transactions(
              self,
              transactions: Tuple[BaseTransaction, ...],
              parent_header: BlockHeader=None
      ) -> Tuple[BaseBlock, Tuple[Receipt, ...], Tuple[BaseComputation, ...]]:
          
          base_header = self.ensure_header(parent_header)
          vm = self.get_vm(base_header)
  
          new_header, receipts, computations = vm.apply_all_transactions(transactions, base_header)
          new_block = vm.set_block_transactions(vm.block, new_header, transactions, receipts)
  
          return new_block, receipts, computations
docs: Generate a block with the provided transactions. This does *not* import
          that block into your chain. If you want this new block in your chain,
          run :meth:`~import_block` with the result block from this method.
  
          :param transactions: an iterable of transactions to insert to the block
          :param parent_header: parent of the new block -- or canonical head if ``None``
          :return: (new block, receipts, computations)