Example #1
0
    async def start_ipv8(self, statedir, listen_port, statistics, no_rest_api):
        """
        Main method to startup IPv8.
        """
        configuration = get_default_configuration()
        configuration['port'] = listen_port

        # Open the database
        self.tc_persistence = TrustChainDB(statedir, 'trustchain')

        if statedir:
            # If we use a custom state directory, update various variables
            for key in configuration["keys"]:
                key["file"] = os.path.join(statedir, key["file"])

            for community in configuration["overlays"]:
                if community["class"] == "TrustChainCommunity":
                    community["initialize"]["persistence"] = self.tc_persistence

        allowed_overlays = ['DHTDiscoveryCommunity', 'DiscoveryCommunity', 'HiddenTunnelCommunity',
                            'TrustChainCommunity']
        configuration['overlays'] = [overlay for overlay in configuration['overlays']
                                     if overlay['class'] in allowed_overlays]

        for overlay in configuration['overlays']:
            if overlay['class'] == 'HiddenTunnelCommunity':
                overlay['initialize']['settings']['min_circuits'] = 0
                overlay['initialize']['settings']['max_circuits'] = 0
                overlay['initialize']['settings']['max_relays_or_exits'] = 1000
                overlay['initialize']['settings']['peer_flags'] = {PEER_FLAG_EXIT_IPV8}

        self.ipv8 = IPv8(configuration, enable_statistics=statistics)
        await self.ipv8.start()

        async def signal_handler(sig):
            print("Received shut down signal %s" % sig)
            if not self._stopping:
                self._stopping = True
                if self.restapi:
                    await self.restapi.stop()
                await self.ipv8.stop()
                await gather(*all_tasks())
                get_event_loop().stop()

        signal.signal(signal.SIGINT, lambda sig, _: ensure_future(signal_handler(sig)))
        signal.signal(signal.SIGTERM, lambda sig, _: ensure_future(signal_handler(sig)))

        print("Starting IPv8")

        if not no_rest_api:
            self.restapi = RESTManager(self.ipv8)
            await self.restapi.start()
Example #2
0
"""
This script outputs a CSV file with the number of confirmed and unconfirmed blocks per day.
"""
from ipv8.attestation.trustchain.database import TrustChainDB

from tc_analysis import DB_PATH

db = TrustChainDB(DB_PATH, "trustchain")
print("Database opened!")

query = "SELECT strftime('%d-%m-%Y', block_timestamp/1000, 'unixepoch'), COUNT(*) FROM blocks GROUP BY strftime('%d-%m-%Y', block_timestamp/1000, 'unixepoch') ORDER BY block_timestamp"
res = list(db.execute(query))
creation_info = []
for day_info in res:
    creation_info.append(day_info)

print("Writing statistics")
with open("creation_stats.csv", "w") as output_file:
    output_file.write("day,blocks\n")
    for day, num_blocks in creation_info:
        output_file.write("%s,%d\n" % (day.decode(), num_blocks))
Example #3
0
"""
This script outputs a CSV file with the number of confirmed and unconfirmed blocks per day.
"""
import datetime

from ipv8.attestation.trustchain.database import TrustChainDB

from tc_analysis import DB_PATH

day_stats = {}

db = TrustChainDB(DB_PATH, "trustchain")
print("Database opened!")

BATCH_SIZE = 500000
MAX_BLOCKS = -1

unconfirmed_txs = set()
unconfirmed_links = set()
tx_times = {}


def write_results():
    with open("creation_stats_detailled.csv", "w") as output_file:
        output_file.write("day,confirmed,unconfirmed\n")
        for day, info in day_stats.items():
            output_file.write("%s,%d,%d\n" % (day, info["confirmed"], info["unconfirmed"]))


parsed_blocks = 0
while True:
Example #4
0
"""
This script outputs a CSV file with identities and the number of blocks created for each identity.
"""
from binascii import hexlify

from ipv8.attestation.trustchain.database import TrustChainDB

from tc_analysis import DB_PATH

day_stats = {}
db = TrustChainDB(DB_PATH, "trustchain")
print("Database opened!")

users_info = db.execute(
    "SELECT DISTINCT public_key, COUNT(*) FROM blocks GROUP BY public_key")
print("Fetched user info!")
user_id = 1
with open("identities.csv", "w") as out_file:
    out_file.write("id,public_key,blocks\n")
    for user_info in users_info:
        out_file.write("%d,%s,%d\n" %
                       (user_id, hexlify(user_info[0]).decode(), user_info[1]))
        user_id += 1
Example #5
0
    async def start_crawler(self, statedir, apiport, no_rest_api, testnet,
                            yappi):
        """
        Main method to startup the TrustChain crawler.
        """

        # Open the database
        self.tc_persistence = TrustChainDB(statedir, 'trustchain')

        if statedir:
            # If we use a custom state directory, update various variables
            for key in crawler_config["keys"]:
                key["file"] = os.path.join(statedir, key["file"])

            for community in crawler_config["overlays"]:
                if community[
                        "class"] == "TrustChainCrawlerCommunity" or community[
                            "class"] == "TrustChainBackwardsCrawlerCommunity":
                    community["initialize"][
                        "persistence"] = self.tc_persistence

        if testnet:
            for community in crawler_config["overlays"]:
                if community["class"] == "TrustChainCommunity":
                    community["class"] = "TrustChainTestnetCommunity"

        extra_communities = {
            "TrustChainCrawlerCommunity":
            TrustChainCrawlerCommunity,
            "TrustChainBackwardsCrawlerCommunity":
            TrustChainBackwardsCrawlerCommunity
        }
        self.ipv8 = IPv8(crawler_config, extra_communities=extra_communities)

        await self.ipv8.start()

        async def signal_handler(sig):
            print("Received shut down signal %s" % sig)
            if not self._stopping:
                self._stopping = True
                if self.restapi:
                    await self.restapi.stop()
                await self.ipv8.stop()

                if yappi:
                    yappi.stop()
                    print("Yappi has shutdown")
                    yappi_stats = yappi.get_func_stats()
                    yappi_stats.sort("tsub")
                    out_file = 'yappi'
                    if statedir:
                        out_file = os.path.join(statedir, out_file)
                    yappi_stats.save(out_file, type='callgrind')

                await gather(*all_tasks())
                get_event_loop().stop()

        signal.signal(signal.SIGINT,
                      lambda sig, _: ensure_future(signal_handler(sig)))
        signal.signal(signal.SIGTERM,
                      lambda sig, _: ensure_future(signal_handler(sig)))

        print("Starting TrustChain crawler")

        if not no_rest_api:
            self.restapi = RESTManager(self.ipv8)
            await self.restapi.start(apiport)

        if yappi:
            yappi.start(builtins=True)
from binascii import hexlify, unhexlify

from deprecated.encoding import decode

from ipv8.attestation.trustchain.database import TrustChainDB

database_path = u"/Users/martijndevos/Documents/trustchain-db"
db = TrustChainDB(database_path, "trustchain")
print("Database opened!")

public_keys = []
balances = {}

# Load public keys
with open("identities.csv", "r") as in_file:
    did_header = False
    for line in in_file.readlines():
        if not did_header:
            did_header = True
            continue

        parts = line.split(",")
        public_key = unhexlify(parts[0])
        public_keys.append(public_key)

processed = 0
for public_key in public_keys:
    last_block = list(
        db.execute(
            "SELECT tx, type FROM blocks WHERE public_key = ? ORDER BY block_timestamp DESC LIMIT 1",
            (public_key, )))[0]
Example #7
0
from deprecated.encoding import decode

from ipv8.attestation.trustchain.database import TrustChainDB

day_stats = {}
database_path = u"/Users/martijndevos/Documents/trustchain-db"
db = TrustChainDB(database_path, "trustchain")
print("Database opened!")

BATCH_SIZE = 500000
TOTAL_BLOCKS = 103149931
FIVE_MB = 5 * 1024 * 1024

size_frequencies = {}
under_5_mb_size_frequencies = {}

parsed_blocks = 0
while parsed_blocks < TOTAL_BLOCKS:
    blocks = list(db.execute("SELECT link_sequence_number, type, tx FROM blocks ORDER BY block_timestamp ASC LIMIT %d OFFSET %d" % (BATCH_SIZE, parsed_blocks)))
    for block in blocks:
        if block[1] != b"tribler_bandwidth":
            continue

        if block[0] == 0:  # Source block
            decoded_tx = decode(block[2])[1]
            download_mb = int(decoded_tx[b"down"] / 1024.0 / 1024.0)
            if download_mb not in size_frequencies:
                size_frequencies[download_mb] = 0
            size_frequencies[download_mb] += 1

            if decoded_tx[b"down"] <= FIVE_MB: