def main(self): # get & set the current blockheight height = self.monerod_get_height( method=self.md_height_discovery_method) if not height or not isinstance(height, int): log_err("Unable to fetch the current blockchain height") return self._blockchain_height = height nodes = RpcNodeList() nodes += RpcNodeList.cache_read(PATH_CACHE) # from `cached_nodes.json` if nodes: nodes = self.scan(nodes, remove_invalid=True) if len(nodes.nodes) <= 2: peers = self.monerod_get_peers() # from monerod nodes += self.scan(peers, remove_invalid=True) if nodes.nodes: nodes.cache_write() nodes.shuffle() inserts = nodes.nodes[:self.dns_provider.max_records] dns_nodes = self.dns_provider.get_records() # insert new records for node in inserts: if node.address not in dns_nodes: self.dns_provider.add_record(node) # remove old records for i, node in enumerate(dns_nodes): if node.address not in inserts: self.dns_provider.delete_record(node)
def main(self): # get & set the current blockheight height = self.monerod_get_height( method=self.md_height_discovery_method) if not height or not isinstance(height, int): log_err("Unable to fetch the current blockchain height") return self._blockchain_height = height nodes = RpcNodeList() nodes += RpcNodeList.cache_read(PATH_CACHE) # from `cached_nodes.json` if nodes: nodes = self.scan(nodes, remove_invalid=True) now = time.time() this_round_uptime = now - self.last_mass_scan_time if len( nodes.nodes ) <= self.dns_provider.max_records or this_round_uptime > CONFIG[ 'scan_interval']: peers = self.monerod_get_peers() # from monerod nodes += self.scan(peers, remove_invalid=True) self.last_mass_scan_time = now if len(nodes.nodes) > 0: nodes.cache_write() nodes.shuffle() inserts = nodes.nodes[:self.dns_provider.max_records] insert_ips = [] for node in inserts: insert_ips.append(node.address) dns_nodes = self.dns_provider.get_records() if dns_nodes != None: # insert new records for node in inserts: if node.address not in dns_nodes: self.dns_provider.add_record(node) # remove old records for node in dns_nodes: if node.address not in insert_ips: self.dns_provider.delete_record(node) else: log_err('Could not fetch DNS records, skipping this update.') else: log_err('Could not get any valid node, skipping this update.')