コード例 #1
0
    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)
コード例 #2
0
    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.')