code: def validate_block(self, block: BaseBlock) -> None:
          
          if not isinstance(block, self.get_block_class()):
              raise ValidationError(
                  "This vm ({0!r}) is not equipped to validate a block of type {1!r}".format(
                      self,
                      block,
                  )
              )
  
          if block.is_genesis:
              validate_length_lte(block.header.extra_data, 32, title="BlockHeader.extra_data")
          else:
              parent_header = get_parent_header(block.header, self.chaindb)
              self.validate_header(block.header, parent_header)
  
          tx_root_hash, _ = make_trie_root_and_nodes(block.transactions)
          if tx_root_hash != block.header.transaction_root:
              raise ValidationError(
                  "Block's transaction_root ({0}) does not match expected value: {1}".format(
                      block.header.transaction_root, tx_root_hash))
  
          if len(block.uncles) > MAX_UNCLES:
              raise ValidationError(
                  "Blocks may have a maximum of {0} uncles.  Found "
                  "{1}.".format(MAX_UNCLES, len(block.uncles))
              )
  
          if not self.chaindb.exists(block.header.state_root):
              raise ValidationError(
                  "`state_root` was not found in the db.\n"
                  "- state_root: {0}".format(
                      block.header.state_root,
                  )
              )
          local_uncle_hash = keccak(rlp.encode(block.uncles))
          if local_uncle_hash != block.header.uncles_hash:
              raise ValidationError(
                  "`uncles_hash` and block `uncles` do not match.\n"
                  " - num_uncles       : {0}\n"
                  " - block uncle_hash : {1}\n"
                  " - header uncle_hash: {2}".format(
                      len(block.uncles),
                      local_uncle_hash,
                      block.header.uncles_hash,
                  )
              )
docs: Validate the the given block.