code: def from_parent(cls,
                      parent: 'BlockHeader',
                      gas_limit: int,
                      difficulty: int,
                      timestamp: int,
                      coinbase: Address=ZERO_ADDRESS,
                      nonce: bytes=None,
                      extra_data: bytes=None,
                      transaction_root: bytes=None,
                      receipt_root: bytes=None) -> 'BlockHeader':
          
          header_kwargs = {
              'parent_hash': parent.hash,
              'coinbase': coinbase,
              'state_root': parent.state_root,
              'gas_limit': gas_limit,
              'difficulty': difficulty,
              'block_number': parent.block_number + 1,
              'timestamp': timestamp,
          }
          if nonce is not None:
              header_kwargs['nonce'] = nonce
          if extra_data is not None:
              header_kwargs['extra_data'] = extra_data
          if transaction_root is not None:
              header_kwargs['transaction_root'] = transaction_root
          if receipt_root is not None:
              header_kwargs['receipt_root'] = receipt_root
  
          header = cls(**header_kwargs)
          return header
docs: Initialize a new block header with the `parent` header as the block's
          parent hash.