code: def pack_block(self, block: BaseBlock, *args: Any, **kwargs: Any) -> BaseBlock:
          
          if 'uncles' in kwargs:
              uncles = kwargs.pop('uncles')
              kwargs.setdefault('uncles_hash', keccak(rlp.encode(uncles)))
          else:
              uncles = block.uncles
  
          provided_fields = set(kwargs.keys())
          known_fields = set(BlockHeader._meta.field_names)
          unknown_fields = provided_fields.difference(known_fields)
  
          if unknown_fields:
              raise AttributeError(
                  "Unable to set the field(s) {0} on the `BlockHeader` class. "
                  "Received the following unexpected fields: {1}.".format(
                      ", ".join(known_fields),
                      ", ".join(unknown_fields),
                  )
              )
  
          header = block.header.copy(**kwargs)
          packed_block = block.copy(uncles=uncles, header=header)
  
          return packed_block
docs: Pack block for mining.
  
          :param bytes coinbase: 20-byte public address to receive block reward
          :param bytes uncles_hash: 32 bytes
          :param bytes state_root: 32 bytes
          :param bytes transaction_root: 32 bytes
          :param bytes receipt_root: 32 bytes
          :param int bloom:
          :param int gas_used:
          :param bytes extra_data: 32 bytes
          :param bytes mix_hash: 32 bytes
          :param bytes nonce: 8 bytes