code: def search(self, expression, callback_func):
          
          cnt = 0
          indexer = AccountIndexer(self)
  
          for contract, address_hash, balance in self.get_contracts():
  
              if contract.matches_expression(expression):
  
                  try:
                      address = _encode_hex(indexer.get_contract_by_hash(address_hash))
                  except AddressNotFoundError:
                      """The hash->address mapping does not exist in our index.
  
                      If the index is up-to-date, this likely means that
                      the contract was created by an internal transaction.
                      Skip this contract as right now we don't have a good
                      solution for this.
                      """
  
                      continue
  
                  callback_func(contract, address, balance)
  
              cnt += 1
  
              if not cnt % 1000:
                  log.info("Searched %d contracts" % cnt)
docs: Search through all contract accounts.
  
          :param expression:
          :param callback_func: