code: def get_block_iter(self, start_block=None, start_block_num=None,
                         reverse=True):
          
          start = None
          if start_block_num:
              if len(start_block_num) < 2:
                  raise ValueError("Invalid start block num")
              if start_block_num[:2] != "0x":
                  raise ValueError("Invalid start block num")
              start = int(start_block_num, 16)
          elif start_block:
              start = start_block.block_num
  
          return _BlockStoreIter(
              self.pointer,
              start,
              reverse)
docs: Returns an iterator that traverses blocks in block number order.
  
          Args:
              start_block (:obj:`BlockWrapper`): the block from which traversal
                  begins
              start_block_num (str): a starting block number, in hex, from where
                  traversal begins; only used if no starting_block is provided
  
              reverse (bool): If True, traverse the blocks in from most recent
                  to oldest block. Otherwise, it traverse the blocks in the
                  opposite order.
  
          Returns:
              An iterator of block wrappers
  
          Raises:
              ValueError: If start_block or start_block_num do not specify a
                  valid block