Ejemplo n.º 1
0
 def prepare_addresses(self, current_block_nr):
     """ Runs the recognition algorithm for future blocks in order to build up a set of known addresses """
     nr_of_async_blocks = 10
     async_requester = Async_requester()
     number_of_blocks = Settings.get_preparation_range("BTC")
     start_block = current_block_nr + number_of_blocks
     current_number = start_block
     while current_number > current_block_nr:
         print("Check " + str(nr_of_async_blocks) + " blocks from:" +
               str(current_number))
         if (current_number - current_block_nr) > nr_of_async_blocks:
             async_requester.add_request_data("BTC", current_number,
                                              nr_of_async_blocks)
         else:
             async_requester.add_request_data(
                 "BTC", current_number, current_number - current_block_nr)
         new_blocks = async_requester.get_multiple_blocks()
         current_number = current_number - nr_of_async_blocks
         for new_transactions in new_blocks:
             for transaction in new_transactions:
                 self.recognize(transaction)
         print("Number of single addresses: " +
               str(len(self.shapeshift_single_addresses)))
     # Save all found adresses
     for address in self.shapeshift_middle_addresses:
         Database_manager.insert_shapeshift_address_btc(address, "middle")
     for address in self.shapeshift_single_addresses:
         Database_manager.insert_shapeshift_address_btc(address, "single")
Ejemplo n.º 2
0
    def __init__(self):
        self.shapeshift_main_addresses = Settings.get_main_addresses()

        self.shapeshift_middle_addresses = Database_manager.get_all_shapeshift_middle_addresses_btc(
            "middle")
        self.shapeshift_single_addresses = Database_manager.get_all_shapeshift_middle_addresses_btc(
            "single")
        self.shapeshift_stop_addresses = Settings.get_trading_platform_addresses(
        )
        self.shapeshift_stop_hashes = Settings.get_hashes_to_block()
Ejemplo n.º 3
0
    def recognize_and_categorize(self, exchange_transaction):
        """ Recognizes if the given transaction is related to Shapeshift and classifies it """
        for tx_output in exchange_transaction["outputs"]:
            if tx_output["address"] in self.shapeshift_main_addresses \
                    or tx_output["address"] in self.shapeshift_middle_addresses \
                    or tx_output["address"] in self.shapeshift_single_addresses:

                #Check if input from trading platform. If yes, ignore tx
                ignore = False
                for tx_input in exchange_transaction["inputs"]:
                    if tx_input["address"] in self.shapeshift_stop_addresses:
                        ignore = True
                        break
                if ignore:
                    pass
                elif tx_output["address"][0] != "3" or tx_output[
                        "address"] in self.shapeshift_main_addresses:
                    if not (exchange_transaction["hash"]
                            in self.shapeshift_stop_hashes):
                        # Delete Shapeshift Address from Outputs (and leave only User Address(es))
                        exchange_transaction["outputs"].remove(tx_output)
                        exchange_transaction["is_exchange_deposit"] = False
                        exchange_transaction["is_exchange_withdrawl"] = True

                        for tx_input in exchange_transaction["inputs"]:
                            if not(tx_input["address"] in self.shapeshift_main_addresses) \
                                    and not(tx_input["address"] in self.shapeshift_middle_addresses):
                                # Check if input address was already used and move from single to middle class.
                                if tx_input[
                                        "address"] in self.shapeshift_single_addresses:
                                    self.shapeshift_single_addresses.remove(
                                        tx_input["address"])
                                    self.shapeshift_middle_addresses.add(
                                        tx_input["address"])
                                else:
                                    self.shapeshift_single_addresses.add(
                                        tx_input["address"])
                                    Database_manager.insert_relation(
                                        tx_input["address"],
                                        tx_output["address"],
                                        exchange_transaction["hash"])
                else:
                    # Leave only Shapeshift Address in Outputs
                    exchange_transaction["outputs"] = [tx_output]
                    exchange_transaction["is_exchange_deposit"] = True
                    exchange_transaction["is_exchange_withdrawl"] = False

                # Delete single addresses after analysing transaction, because no more needed
                for tx_output_delete in exchange_transaction["outputs"]:
                    if tx_output_delete[
                            "address"] in self.shapeshift_single_addresses:
                        self.shapeshift_single_addresses.remove(
                            tx_output_delete["address"])
                return exchange_transaction
        return exchange_transaction
Ejemplo n.º 4
0
def main(address_to_prove):
    """ Track from where an address originated. Goes back the path taken by the address recognition """
    address_to_search = str(address_to_prove)
    print("start with " + address_to_search)
    Database_manager.initialize_db()
    rels = Database_manager.get_relations(address_to_search)
    while rels:
        curr_addr = rels[0][2]
        print("From: INPUT:" + str(rels[0][1]) + ", OUTPUT " +
              str(rels[0][2]) + ", HASH: " + str(rels[0][3]))
        rels = Database_manager.get_relations(curr_addr)
Ejemplo n.º 5
0
def main():
    """ Runs the recognition process from the given block number """
    start_time = time.time()
    Database_manager.initialize_db()
    Database_manager.create_table_shapeshift_addresses_btc()

    address_tracker = Address_tracker_btc()
    address_tracker.prepare_addresses(511557)

    print("Duration: " + str(time.time() - start_time))
    print("finish")
Ejemplo n.º 6
0
    def recognize(self, exchange_transaction):
        """ Recognizes if the given transaction is related to Shapeshift and saves new addresses """
        for tx_output in exchange_transaction["outputs"]:
            if tx_output["address"] in self.shapeshift_main_addresses \
                    or tx_output["address"] in self.shapeshift_middle_addresses \
                    or tx_output["address"] in self.shapeshift_single_addresses:

                #Check if input from trading platform. If yes, ignore tx
                ignore = False
                for tx_input in exchange_transaction["inputs"]:
                    if tx_input["address"] in self.shapeshift_stop_addresses:
                        ignore = True
                        break
                if ignore:
                    pass
                elif tx_output["address"][0] != "3" or tx_output[
                        "address"] in self.shapeshift_main_addresses:
                    if not (exchange_transaction["hash"]
                            in self.shapeshift_stop_hashes):
                        for tx_input in exchange_transaction["inputs"]:
                            if not(tx_input["address"] in self.shapeshift_main_addresses)\
                                    and not(tx_input["address"] in self.shapeshift_middle_addresses):
                                # Check if input address was already used and move from single to middle class
                                if tx_input[
                                        "address"] in self.shapeshift_single_addresses:
                                    print("Adding new MIDDLE Address: " +
                                          str(tx_input["address"]))
                                    self.shapeshift_single_addresses.remove(
                                        tx_input["address"])
                                    self.shapeshift_middle_addresses.add(
                                        tx_input["address"])
                                else:
                                    print("Adding new SINGLE Address: " +
                                          str(tx_input["address"]))
                                    self.shapeshift_single_addresses.add(
                                        tx_input["address"])
                                    Database_manager.insert_relation(
                                        tx_input["address"],
                                        tx_output["address"],
                                        exchange_transaction["hash"])
                for tx_output_delete in exchange_transaction["outputs"]:
                    if tx_output_delete[
                            "address"] in self.shapeshift_single_addresses:
                        self.shapeshift_single_addresses.remove(
                            tx_output_delete["address"])
                return
 def __init__(self, parent=None):
     super(Ui_MainWindow, self).__init__(parent)
     self.ab = dm.Database_manage()
     self.ab.init('HCI_Database', 'QSQLITE')
     self.f = fr.Face_Thread()
     self.r = rm.Rec_Thread()
     self.num_iter = 0
     self.setupUi(self)
     self.setFixedSize(320, 380)
Ejemplo n.º 8
0
 def save_all_addresses(self):
     """ Saves all identified addresses to the DB """
     Database_manager.create_table_shapeshift_addresses_btc_end()
     for address in self.shapeshift_middle_addresses:
         Database_manager.insert_shapeshift_address_btc_end(
             address, "middle")
     for address in self.shapeshift_single_addresses:
         Database_manager.insert_shapeshift_address_btc_end(
             address, "single")
Ejemplo n.º 9
0
def main():
    """ Main method which runs the tool from the given block numbers """
    start = time.time()
    print ("starting time: " + str(start))
    # Create MySQL Database and connect
    Database_manager.initialize_db()
    # Create MySQL Tables
    Database_manager.create_table_exchanges()
    Database_manager.create_table_shapeshift_addresses_btc()

    # Delete all data from DB
    Database_manager.delete_all_data()

    # Find Exchanges
    print ("Searching for Exchanges...")
    currencies_list = ["BTC", "ETH"]
    # February data
    current_block_number_dict = {"BTC": 511557, "ETH": 5180422}
    exchange_finder = Exchange_finder(currencies_list, current_block_number_dict=current_block_number_dict)
    exchange_finder.find_exchanges()
    print("Duration: " + str(time.time() - start))
Ejemplo n.º 10
0
def main():
    # Create MySQL Database and connect
    Database_manager.initialize_db()
    # Create MySQL Tables
    Database_manager.create_table_shapeshift()
    Database_manager.create_table_cmc()
    Database_manager.create_table_exchanges()

    previous_exchanges = []

    # Dalete all data from DB
    Database_manager.delete_all_data()

    # Update Coinmarketcap data
    last_time_updated_cmc = update_cmc(None)
    # Update Shapeshift
    last_time_updated_ss = update_ssf(None)

    while True:
        result = Shapeshift.get_last_transactions(previous_exchanges)
        if result:
            new_exchanges = result["new_exchanges"]
            # After every loop: Wait the half of the duration of retrieved 50 Txs
            duration_to_wait = result["duration"].total_seconds()/2
            if new_exchanges:
                print ("Starting loop: " + str(datetime.datetime.now()))
                start_time = time.time()

                # Update Coinmarketcap data
                last_time_updated_cmc = update_cmc(last_time_updated_cmc)
                # Update Shapeshift
                last_time_updated_ss = update_ssf(last_time_updated_ss)

                previous_exchanges = new_exchanges

                print ("Search for Ethereum Txs...")
                left_transactions_eth = Ether.get_ethereum_transaction(new_exchanges)
                if left_transactions_eth:
                    Ether.get_ethereum_transaction_infura(left_transactions_eth)
                print ("Search for Litecoin Txs...")
                left_transactions_ltc = Litecoin.get_litecoin_transaction(new_exchanges)
                if left_transactions_ltc:
                    time.sleep(50)
                    Litecoin.get_litecoin_transaction(left_transactions_ltc)
                print ("Search for Bitcoin Txs...")
                left_transactions_btc = Bitcoin.get_bitcoin_transaction(new_exchanges)
                if left_transactions_btc:
                    #time.sleep(30)
                    Bitcoin.get_bitcoin_transaction(left_transactions_btc)
                print ("Finished loop: " + str(datetime.datetime.now()))
                elapsed_time = time.time() - start_time
                if elapsed_time < duration_to_wait:
                    print ("Done! Wait " + str(duration_to_wait - elapsed_time) + " seconds")
                    time.sleep(duration_to_wait - elapsed_time)

            else:
                print ("No Transactions. Wait " + str(duration_to_wait) + " seconds")
                time.sleep(duration_to_wait)
        else:
            print ("Retrieving Transactions from Shapeshift didn't work")
            time.sleep(180)
import numpy
from sklearn.svm.classes import SVC
import Features_manager
import Database_manager
from sklearn.metrics.classification import precision_recall_fscore_support, accuracy_score
import csv

#initializate database_manager
database_manager = Database_manager.make_database_manager()
#initializate feature_manager
feature_manager = Features_manager.make_feature_manager()

tweets_training = numpy.array(database_manager.return_tweets_training())
labels_training = numpy.array(feature_manager.get_label(tweets_training))

tweets_test = numpy.array(database_manager.return_tweets_test())
#labels_test=numpy.array(feature_manager.get_label(tweets_test))

#feature_type=feature_manager.get_availablefeaturetypes()

feature_type = [
    "ngrams", "chargrams", "deprel", "Sidorovbigramsform",
    "Sidorovbigramsdeprel"
]

print("train: ", len(tweets_training))
print("test: ", len(tweets_test))

X, X_test, feature_name, feature_index = feature_manager.create_feature_space(
    tweets_training, feature_type, tweets_test)
Ejemplo n.º 12
0
 def save_found_exchanges(self):
     """ Saves all transaction pairs found to the DB with one command """
     if self.current_exchanges_found:
         Database_manager.insert_multiple_exchanges(
             self.current_exchanges_found)
         self.current_exchanges_found = []