Пример #1
0
def newBlock():
    block = Block()
    block.blockFromByteArray(request.get_data())
    if not blockchain.isBlockValid(block):
        return "Invalid Block", 404
    global mineWorker
    mineWorker.join()
    blockchain.processBlock(block)
    blockchain.addBlock(block)
    mineWorker = Miner(blockchain, out_q)
    mineWorker.start()
    propagateBlock(block)
    return "Block added!", 200
Пример #2
0
def main():
    db = DataBase()
    db.connect()
    m = Miner()
    m.get_files()
    m.get_tags()
    m.insert()
Пример #3
0
    def __init__(self, num_users, num_miners, difficulty):
        """
        Initialization of controller for the FLOPchain network
        Simulates the role of nodes in a Blockchain system. Should preserve all
        decentralization logic, just makes simulation simpler.
        :param num_users: Number of users in the network
        :param num_miners: Number of miners in the network
        :param difficulty: Mining difficulty
        """

        # A default function that miners can use to fill the requirement
        def nullFunc():
            sleep(1)
            return 2**100

        nullJob = Computation("Null", nullFunc)
        self.computations.add(nullJob)
        self.difficulty = int(difficulty)

        # initialize users
        for _ in range(0, num_users):
            self.users.append(User.User(self))

        # set up the genesis block
        t = Transaction("Ondaatje", "Jason", "0")
        t.salt = '262'
        genesis = Block([t], "", computation=Computation("", None))
        self.blockchain.append(genesis)

        # initialize miners
        for i in range(0, num_miners):
            u = self.users[i % len(self.users)]
            m = Miner(self, [genesis], u)
            self.miners.append(m)
            thread.start_new_thread(m.mine, ())
Пример #4
0
 def __init__(self, n):
     self.num_of_miners = n
     self.miners = []
     # create new miners
     for x in range(0,n):
         # create each miner
         self.miners += [Miner(Blockchain(), x)]
Пример #5
0
class Minecart():
    miner = None

    def menu(self):
        print('1- Load file')
        self.push()
        print('2- Search in file')
        self.beat()

    def push(self):
        file = input('Enter file name or path: ')
        print('Opening: ./' + file + '.txt ...')
        self.miner = Miner('./' + file + '.txt')

    def beat(self):
        listwords = []
        listtags = []

        try:
            typedwords = input('Enter list of words: ')
            listwords = typedwords.split()
        except SyntaxError:
            listwords = []

        try:
            typedtags = input('Enter list of tags: ')
            listtags = typedtags.split()
        except SyntaxError:
            listtags = []

        if (listtags == [] and listwords == []):
            print('You\'ve typed an empty query')
            return

        if (listtags == []):
            df = self.miner.search(tags=[], words=listwords)
            print(df)
            return

        if (listwords == []):
            df = self.miner.search(tags=listtags, words=[])
            print(df)
            return

        df = self.miner.search(tags=listtags, words=listwords)
        print(df)
        return
Пример #6
0
 def spawn(self, miner):
     if miner in config.pools:
         if miner in self.miner and self.miner[miner].isRunning:
             print('Thread is already running!')
         else:
             self.miner[miner] = Miner(config.pools[miner])
             self.miner[miner].start()
     else:
         print("%s not in config.pools" % miner)
Пример #7
0
    def __project(self, projection):
        nextBuy = self.__getNextBuy(projection)
        while nextBuy.date < self.startDate + timedelta(self.days):
            projection.miners.append(Miner(
                hashRate=nextBuy.ghs, 
                startDate=nextBuy.date, 
                days=Reinvestment.__planDays, 
            ))

            projection.startDate = nextBuy.date
            projection.project()
            nextBuy = self.__getNextBuy(projection)
Пример #8
0
 def __init__(self,
              work_queue,
              difficulty,
              identity,
              selfish=False,
              trydospending=False):
     self.wq = work_queue
     self.miner = Miner.new(Blockchain(), 0, difficulty, selfish)
     self.upcoming_transactions = []
     self.received_blocks = []
     self.identity = identity
     self.spv_clients = [5007, 5008, 5009]
     self.other_miners = [5000, 5001, 5002, 5003, 5004, 5005]
     self.publist = []
     self.other_miners.remove(self.identity)
     self.addr = '127.0.0.1'
     self.pubkeys = []
     self.selfish = selfish
     self.trydospending = trydospending
     self.dospending = False
     f = open(str(self.identity) + '.txt', 'w')
     f.write(self.miner.get_pk())
     f.close()
Пример #9
0
class Architect:
    """Top level class for stock program"""
    
    def __init__(self):
        # DB init goes here
        self.miner = Miner()
        
        # create DB calls
        
        
    def mine_today(self):
        # add all the companies from tblCompany
        for dict in [{"Name":"Google", "Symbol":"GOOG"}]:
            self.miner.add_company(Company(dict["Name"], dict["Symbol"]))
        
        self.miner.mine()
        self.miner.score_companies()
        
        for company in self.miner.company_list:
            print company.company_name, company.current_price, company.current_media
Пример #10
0
    def main(self, msg_qs, outputq):

        #         print(self.id, len(self.msg_ct_list))
        #         self.msg_ct_list.append(self.id)
        #         print(self.id, self.msg_ct_list)
        done = False
        self.public_keys_of_nodes = [None] * self.N
        self.public_keys_of_nodes[self.id] = self.public_key
        self.node_id_of_public_key = {}
        self.node_id_of_public_key[self.public_key] = self.id
        self.last_transaction_verified = True
        self.last_transaction_key = None
        ct = 0
        for i in range(0, self.N):
            if i != self.id:
                msg_qs[i].put(
                    Message("PUBLIC_KEY", self.public_key, self.id, i))
        ct = 0
        while ct < self.N - 1:
            try:
                msg = msg_qs[self.id].get(block=True, timeout=10)
                if msg.type == "PUBLIC_KEY":
                    self.update_public_key_of_node(msg.src, msg.msg)
                    ct += 1

            except Q.Empty:
                print(" No message and wait for the public keys")
        if self.debug:
            print("Received public key total from ct {} from every node to {}".
                  format(str(ct), str(self.id)))

        miner = Miner(self.id, self.N, self.narry, self.proof_of_work_zeros,
                      self.hash_type, self.confirmation_blocks,
                      self.private_key, self.public_keys_of_nodes,
                      self.node_id_of_public_key, self.debug)
        debug_block_creation_time = True
        if self.id == 0:  ## create a genesis block
            inputs = [Input('None', 'None')]
            outputs = []
            total_amount_generated = 0
            print("Initial money")
            for i in range(0, self.N):
                amount = 1000
                if i == 0:
                    amount += self.block_reward
                total_amount_generated += amount
                print(i, amount)
                outputs.append(
                    Output(self.public_keys_of_nodes[i].hex(), amount,
                           self.hash_type))
            coinbase_t = Transaction(self.public_keys_of_nodes[self.id],
                                     inputs,
                                     outputs,
                                     self.private_key,
                                     t_type='COINBASE',
                                     hash_type=self.hash_type)
            miner.blockchain = BlockChain(self.narry, self.proof_of_work_zeros,
                                          self.hash_type)
            if debug_block_creation_time:
                start_time_block = time.time()
            miner.blockchain.add_genesis_block([coinbase_t])
            if debug_block_creation_time:
                print("Time taken in genesis block creation,",
                      time.time() - start_time_block)
            for i in range(1, self.N):
                if self.debug:
                    print("Sending everyone else the genesis block ", self.id)
                msg_qs[i].put(
                    Message("GENESIS_BLOCK", miner.blockchain, self.id, i))
            self.update_unspent_btc_from_block(miner.blockchain.blockchain[0])
        else:  ### everyone else will receive the genesis block and use it further for transaction
            received_genesis_block = False
            while not received_genesis_block:
                try:
                    msg = msg_qs[self.id].get(block=True, timeout=10)
                    if msg.type == "GENESIS_BLOCK":
                        miner.blockchain = msg.msg
                        received_genesis_block = True

                except Q.Empty:
                    print(" Waiting for genesis block,", self.id)
            if self.debug:
                print(
                    "Received genesis block, now need to verify it and update its own money ",
                    self.id)
                #msg.msg.blockchain[0].nounce = '223'
            if miner.verify_genesis_block():
                if self.debug:
                    print("verfied genesis block")
                self.update_unspent_btc_from_block(
                    miner.blockchain.blockchain[0])

        done = False
        die_out_seconds = 120
        timeout_seconds = 1
        start_time = time.time()
        last_block_cor = time.time()
        last_transaction_time = time.time()
        waited_time = 0
        debug_size = False
        debug_smt_contract = False
        debug_multi_transaction = False
        debug_smt_execute_once = False
        debug_smt_repeat = False
        smt_contract = False
        debug_block_creation_time = False
        debug_block_creation_time_num_of_nodes = False
        if debug_smt_contract and self.id == 0:
            debug_smt_execute_once = True
            smt_contract = True

        if debug_smt_contract and self.id == 1:
            debug_smt_repeat = True
            smt_contract = True

        if debug_size and self.id == 0:
            print(self.id, " size of block chain ", miner.blockchain.size())
        while not done:
            try:
                #print(self.id , "main checking for message")
                msg = msg_qs[self.id].get(block=True, timeout=timeout_seconds)
                waited_time = 0
                if msg.type == "Transaction":
                    #print(self.id,"Transaction has been received from ", msg.src )
                    if msg.msg.verify_sign_transaction():
                        miner.transactions_collected.append(
                            msg.msg)  ###check if already exist in blockchain
                        last_transaction_time = time.time()
                elif msg.type == "Block":
                    if self.debug:
                        print("Node ", self.id, "Block has been received from",
                              msg.src)
                    status = miner.add_block(msg.msg)

                    if status:
                        #print(self.id, " Received block has been added to blockchain ")
                        last_block_cor = time.time()
                    else:
                        print(self.id, " Received block was not added")
                else:
                    print(
                        "Node ", self.id,
                        " Received message of type , I dont do what do i do with it",
                        msg.type, msg.src)

            except Q.Empty:
                waited_time += timeout_seconds

                if waited_time > die_out_seconds:
                    print("waited for transactions for more than ",
                          die_out_seconds,
                          "  seconds, seems none is using bitcoin, lets die")
                    #print("I {} had a amount of {} BTC".format(str(self.id),str(self.btc)))
                    self.print_self_balance()
                    return
                else:
                    if time.time(
                    ) - last_transaction_time > 15 and self.last_transaction_verified:
                        if coin_toss(1.0 /
                                     self.N) and (not debug_smt_contract or
                                                  (debug_smt_contract and
                                                   (self.id in [0, 1, 3, 4]))):
                            #if True:
                            self.msg_ct_list.append(self.id)
                            if len(self.msg_ct_list) <= self.msg_ct_limit:
                                send_to = pick_receiver(self.id, self.N)
                                if debug_smt_contract and self.id == 0:
                                    send_to = 8
                                if debug_smt_contract and self.id == 1:
                                    send_to = 9
                                amount = random.randint(1, 4)
                                if debug_smt_execute_once and self.return_self_balance(
                                ) >= 700:
                                    amount = 100
                                    debug_smt_execute_once = False
                                    print(
                                        "############\nNode ", self.id,
                                        " : balance is ",
                                        self.return_self_balance(),
                                        " so as smart contract of execute once, sending ",
                                        amount, "btc to ", send_to,
                                        "\n############")
                                else:
                                    if debug_smt_repeat and self.return_self_balance(
                                    ) >= 700:
                                        amount = 100
                                        print(
                                            "############\nNode ", self.id,
                                            " : balance is ",
                                            self.return_self_balance(),
                                            " so as smart contract of repeat, sending ",
                                            amount, "btc to ", send_to,
                                            "\n############")
                                    else:
                                        amount = random.randint(1, 4)
                                unspent_key = None
                                for key in self.unspent_btc.keys():
                                    if amount + 3 <= self.unspent_btc[key][1]:
                                        unspent_key = key

                                if unspent_key is None:
                                    print("{} has no money left , so dying".
                                          format(str(self.id)))
                                else:
                                    #key = list(self.unspent_btc.keys())[0]
                                    #print("{} has amount {} btc in selected key".format(str(self.id),str(self.unspent_btc[unspent_key][1])))
                                    if debug_multi_transaction:
                                        send_to_v = pick_receiver(
                                            self.id, self.N)
                                        inputs = [
                                            Input(
                                                self.unspent_btc[unspent_key]
                                                [2],
                                                self.unspent_btc[unspent_key]
                                                [3])
                                        ]
                                        outputs = [
                                            Output(
                                                self.public_keys_of_nodes[
                                                    send_to].hex(), amount,
                                                self.hash_type),
                                            Output(
                                                self.public_keys_of_nodes[
                                                    send_to_v].hex(),
                                                amount + 2, self.hash_type),
                                            Output(
                                                self.public_keys_of_nodes[
                                                    self.id].hex(),
                                                self.unspent_btc[unspent_key]
                                                [1] - amount - amount - 2 - 1,
                                                self.hash_type)
                                        ]
                                        print(
                                            "Node {} Sending {} btc to node {} and {} btc to node {} "
                                            .format(str(self.id), str(amount),
                                                    str(send_to),
                                                    str(amount + 2),
                                                    str(send_to_v)))
                                    else:

                                        inputs = [
                                            Input(
                                                self.unspent_btc[unspent_key]
                                                [2],
                                                self.unspent_btc[unspent_key]
                                                [3])
                                        ]
                                        outputs = [
                                            Output(
                                                self.public_keys_of_nodes[
                                                    send_to].hex(), amount,
                                                self.hash_type),
                                            Output(
                                                self.public_keys_of_nodes[
                                                    self.id].hex(),
                                                self.unspent_btc[unspent_key]
                                                [1] - amount - 1,
                                                self.hash_type)
                                        ]

                                    transaction = Transaction(
                                        self.public_keys_of_nodes[self.id],
                                        inputs,
                                        outputs,
                                        self.private_key,
                                        t_type='Regular',
                                        hash_type=self.hash_type)
                                    for i in range(0, self.N):
                                        if i != self.id:
                                            msg_qs[i].put(
                                                Message(
                                                    "Transaction", transaction,
                                                    self.id, i))
                                    miner.transactions_collected.append(
                                        transaction)
                                    self.last_transaction_verified = False
                                    self.last_transaction_key = unspent_key
                                    #del self.unspent_btc[key] #### check for this and
                                    self.last_transaction_time = time.time()
                                    print("Node {} Sending {} btc to node {} ".
                                          format(str(self.id), str(amount),
                                                 str(send_to)))
                                    waited_time = 0

                    if time.time() - last_block_cor > self.block_creation_time:
                        #last_block_cor= time.time()
                        if coin_toss(1 * 1.0 / self.N):
                            #if True and self.id == 0:
                            print(self.id, " Creating a block ",
                                  len(miner.transactions_collected))

                            if debug_block_creation_time:
                                print("starting debug block time creatioin")
                                times = []
                                for i in range(0, 100):
                                    block_start_time = time.time()
                                    miner.create_block()
                                    block_end_time = time.time()
                                    times.append(block_end_time -
                                                 block_start_time)
                                print(self.id, " block chain creation times",
                                      times)

                            new_block = miner.create_block()
                            if new_block is not None:
                                #
                                if self.debug:
                                    print(
                                        self.id,
                                        " block has been created but first check if someone computed first"
                                    )
                                send_block_to_ee = False
                                empty_queue = False
                                temp_msgs = []
                                while not empty_queue:
                                    try:
                                        msg = msg_qs[self.id].get(
                                            block=True,
                                            timeout=timeout_seconds)
                                        if msg.type == "Block":
                                            if self.debug:
                                                print(
                                                    self.id,
                                                    " Ohh Received a block from ",
                                                    msg.src)

                                            miner.add_block(msg.msg)
                                            empty_queue = True
                                        else:
                                            temp_msgs.append(msg)
                                    except Q.Empty:
                                        send_block_to_ee = True
                                        empty_queue = True
                                        for msg in temp_msgs:
                                            msg_qs[self.id].put(
                                                Message(
                                                    msg.type, msg.msg, msg.src,
                                                    msg.dst)
                                            )  ## putting it back so can be fetched again in main loop

                                if send_block_to_ee:
                                    #if self.debug:
                                    waited_time = 0

                                    print(
                                        self.id,
                                        " No block has been recieved, so send it everyone"
                                    )
                                    print(self.id,
                                          " size of blockchain containing ",
                                          len(new_block.transactions),
                                          " and size of ",
                                          new_block.size_merkle())
                                    for i in range(0, self.N):
                                        if i != self.id:
                                            if self.debug:
                                                print(
                                                    self.id,
                                                    " sending created block to ",
                                                    i)
                                            msg_qs[i].put(
                                                Message(
                                                    "Block", new_block,
                                                    self.id, i))
                                    miner.add_block(new_block)
                                #last_block_cor = time.time()

                        res = miner.increase_verified_block()
                        #print(self.id, "after adding status",res)
                        last_block_cor = time.time()
                        if res:
                            if debug_size and self.id == 0:
                                print(self.id,
                                      " size of block chain after adding ",
                                      miner.blockchain.size())
                            self.update_unspent_btc_from_block(
                                miner.blockchain.blockchain[
                                    miner.blockchain.confirmed_block_index]
                            )  ## it will
                            ## also need to check if last payment by this node is verified
                            self.print_self_balance()
Пример #11
0
from argparse import ArgumentParser
from flask import Flask, jsonify, request
from Miner import Miner
import requests
from GeneralSettings import host_address, blockchain_port

# Instantiate our Node
app = Flask(__name__)

# Instantiate the Miner
miner = Miner()


@app.route('/mine', methods=['GET'])
def mine():
    result = miner.mine()

    if type(result) is str:
        return jsonify({'message': result}), 200

    response = {
        'message': "New Block Forged",
        'index': result['index'],
        'transactions': result['transactions'],
        'proof': result['proof'],
        'previous_hash': result['previous_hash'],
        'timestamp': result['timestamp']
    }

    return jsonify(response), 200
Пример #12
0
from argparse import ArgumentParser
from flask import Flask, jsonify, request
from Miner import Miner
import requests
from GeneralSettings import host_address, blockchain_port

# Instantiate our Node
app = Flask(__name__)

# Instantiate the Miner
miner = Miner()


@app.route('/mine', methods=['GET'])
def mine():
    result = miner.mine()

    if type(result) is str:
        return jsonify({
            'message': result
        }), 200

    response = {
        'message': "New Block Forged",
        'index': result['index'],
        'transactions': result['transactions'],
        'proof': result['proof'],
        'previous_hash': result['previous_hash'],
        'timestamp': result['timestamp']
    }
Пример #13
0
    def __init__(self,
                 pow,
                 miner_count,
                 neighbour_count,
                 delay,
                 upload_bandwidth,
                 download_bandwidth,
                 hash_power=1,
                 selfish_miner_hash_power_in_percent=0.3,
                 propagator_count=100,
                 propagator_delay=0,
                 propagator_upload_bandwidth=100,
                 propagator_download_bandwidth=100,
                 racing_test=False,
                 race_count=0):

        self.hash_power = hash_power
        self.selfish_miner_hash_power_in_percent = selfish_miner_hash_power_in_percent
        self.racing_test = racing_test
        self.race_count = race_count
        if not racing_test:
            # init <miner_count> miners
            self.pow = pow
            self.miner_count = miner_count
            self.propagater_count = propagator_count
            self.selfish_miner = None
            # if configuration == "selfish1":
            selfish_miner_hr = math.ceil(
                hash_power * miner_count /
                (1 - selfish_miner_hash_power_in_percent) -
                miner_count * hash_power)
            self.selfish_miner = SelfishMiner(0, pow, delay, upload_bandwidth,
                                              download_bandwidth,
                                              selfish_miner_hr)
            selfish_propagaters = [
                SelfishPropagator(self.selfish_miner, i, pow, propagator_delay,
                                  propagator_upload_bandwidth,
                                  propagator_download_bandwidth)
                for i in range(1 + self.miner_count, 1 + self.miner_count +
                               self.propagater_count)
            ]
            self.miners = [Miner(i, pow, delay, upload_bandwidth, download_bandwidth, hash_power) for i in range(1, miner_count+1)] \
                            + [self.selfish_miner] + selfish_propagaters
            # else:
            #     self.miners = [Miner(i, pow, delay, bandwidth, hash_power) for i in range(miner_count)]
            NetworkGraphGen.random_graph(self.miners, neighbour_count)
            self.clock = 0
            self.propagation_rates = []

        else:
            # init <miner_count> miners
            self.pow = POW(1, 1)
            self.miner_count = miner_count
            self.propagater_count = propagator_count
            self.selfish_miner = None
            # if configuration == "selfish1":
            self.selfish_miner = SelfishMiner(0, self.pow, delay,
                                              upload_bandwidth,
                                              download_bandwidth, 1)
            self.selfish_miner.racing_test = True
            racer_miner = Miner(1, self.pow, delay, upload_bandwidth,
                                download_bandwidth, 1)
            selfish_propagaters = [
                SelfishPropagator(self.selfish_miner, i, self.pow,
                                  propagator_delay,
                                  propagator_upload_bandwidth,
                                  propagator_download_bandwidth)
                for i in range(1 + self.miner_count, 1 + self.miner_count +
                               self.propagater_count)
            ]
            self.miners = [Miner(i, self.pow, delay, upload_bandwidth, download_bandwidth, 0) for i in range(2, miner_count+1)] \
                          + [self.selfish_miner] + [racer_miner] + selfish_propagaters
            # else:
            #     self.miners = [Miner(i, pow, delay, bandwidth, hash_power) for i in range(miner_count)]
            NetworkGraphGen.random_graph(self.miners, neighbour_count)
            self.clock = 0
            self.propagation_rates = []
Пример #14
0
#! /usr/bin/env python3
#! /usr/bin/python3.6
# Form implementation generated from reading ui file 'untitled.ui'
# Created by: PyQt5 UI code generator 5.10.1

import vlc, sqlite3, _thread, time
from PyQt5 import QtCore, QtGui, QtWidgets
from DB import Database
from Miner import Miner
from create_person_dialog import Ui_create_pers
from create_group_dialog import Ui_create_group_dialog
from link_dialog import Ui_Dialog
global miner, db
miner = Miner(None)
db = Database()


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.playing = False
        self.player = None
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(726, 570)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
Пример #15
0
from Miner import Miner
from MinersWife import MinersWife
from EntityNames import EntityNames
from EntityManager import EntityManager
import time

# create a miner
Bob = Miner(EntityNames.ent_Miner_Bob)

# create his wife
Elsa = MinersWife(EntityNames.ent_Elsa)

#register them with the entity manager
#EntityMgr = EntityManager()
EntityManager.getInstance().RegisterEntity(Bob)
EntityManager.getInstance().RegisterEntity(Elsa)

for x in range(0, 20):
    Bob.Update()
    Elsa.Update()
    time.sleep(1)
Пример #16
0
 def start_miner(self):
     prev_hash = hash_string(str(self.blockchain.get_last()))
     self.miner = Miner(self, prev_hash, self.blockchain.get_size(),
                        self.transaction_pool)
     self.miner.start()
Пример #17
0
    while not Connected():
        Connect()
        Wait(10000)


if __name__ == "__main__":
    AddToSystemJournal("stealth-pyMiner script starting...")

    AddToSystemJournal("Target your storage container...")
    ClientRequestObjectTarget()
    while not ClientTargetResponsePresent():
        Wait(250)
    _storage = ClientTargetResponse()

    #  Miner(homerunebook name, [mining book names], storage container)
    _m = Miner("Home", ["Mining1", "Mining2"], _storage)

    while _m.Mounted:
        UseObject(Self())
        Wait(750)

    _m.DropoffOre()

    while not Dead():
        if len(_m.DiggingTools) < 10:
            _m.MakeTools()

        for _miningBook in _m.RunebooksMining:
            for _rune in range(0, 15):
                #  _miningBook.Recall(_rune)
                _m.Mine(10)
Пример #18
0
import sys, os
sys.path.insert(0, os.path.abspath('..'))

from flask import Flask, request, jsonify
from Miner import Miner
from Utils.Navtime import NavTime
from Utils.Hash import CalculateFileHash

app = Flask(__name__)
miner = Miner(CalculateFileHash("/home/gaurav/NAV-Chain/demo/id_rsa.pub"), "",
              "", "")
time = NavTime()


@app.route("/getNewsFromClient", methods=["POST"])
def getNewsFromClient():
    ip = request.remote_addr
    # print(request.)
    user_id = request.json["id"]
    text = request.json["text"]
    genre = request.json["genre"]
    miner.ReceiveContent(miner.id, user_id, text, genre)
    miner.clientIp.append(ip)
    return jsonify({"bid": "QmdDyNf1oKqH44cRisLE9a298cBcry3ifrpGrweXGEjZt8"})


@app.route("/getNewsfromPeer", methods=["POST"])
def getNewsfromPeer():
    ip = request.remote_addr
    user_id = request["id"]
    text = request["text"]
Пример #19
0
    class MyManager(BaseManager):
        pass

    MyManager.register('QEL', Queue_Event_Lock)
    main_node_pool = []
    seed_nodes = dict({})
    manager = MyManager()
    manager.start()

    # create genesis block
    for i in range(num_seed_nodes):
        # seed_nodes[i] = new_seed.get_QEL()
        seed_nodes[i] = manager.QEL()
        new_seed = Miner(miner_id=i,
                         blockchain=None,
                         manager_qel=seed_nodes[i],
                         node_type="SEED")
        main_node_pool.append(new_seed)

    # create genesis blockchain with cionbase for each seed node
    block = Block(node_pool=main_node_pool, genesis_block=True)
    block.construct_merkle_tree()
    print('Node 0 ki compute power', main_node_pool[0].compute_power)
    # block = calc_proof_of_work(block, main_node_pool[0].compute_power)
    block = calc_proof_of_work(block, 2)
    print('Done computing')

    gen_blockchain = Blockchain(genesis_block=block)
    for i in range(num_seed_nodes):
        main_node_pool[i].blockchain = gen_blockchain
Пример #20
0
 def __init__(self):
     # DB init goes here
     self.miner = Miner()
Пример #21
0
 def push(self):
     file = input('Enter file name or path: ')
     print('Opening: ./' + file + '.txt ...')
     self.miner = Miner('./' + file + '.txt')
Пример #22
0
            q3.put(blk)

        if js[0] == '1':
            print("=================Transaction received===================")
            t = js[1]
            q4.put(t)

        if js[0] == '2':
            print("=================Coin request received================")
            receiver, amt = js[1],js[2]
            q5.put({receiver:amt})
            print(receiver, amt)


if __name__ == "__main__":
    miner = Miner('5ff904f38a0b1c1de04193668f7442c5146bd0c868eb2e31','b7e9e8c717bbfab299e6a4dbaacef166957aab1865a5762d4e22cc7de31057c99682651642e1bd6ad138c03e4f37f495')
    print('pubkey:', miner.pubkey)
    miner.port = ("localhost", 2346)
    q3 = Queue()
    q4 = Queue()
    q5 = Queue()
    p1 = Process(target=miner.mine_block, args=(q3,q4,q5))
    p2 = Process(target=server, args=(q3,q4,q5))
    p1.start()
    p2.start()





Пример #23
0
class Node:
    def __init__(self, address, own_port):
        self.address = address  # wallet address
        self.own_port = own_port  # porta na qual receberá requests
        self.peers = None
        self.blockchain = Blockchain(Genesis())
        self.difficulty = 4
        self.current_state = None
        self.miner = None
        self.transaction_pool = []
        self.lock = RLock()

    def start_node(self):
        initial_socket = socket(AF_INET, SOCK_STREAM)
        initial_socket.connect((SERVER, SERVER_PORT))
        initial_socket.send(write_message('connect', self.own_port))
        initial_socket.shutdown(SHUT_WR)

        try:
            response = ''
            while True:
                data = initial_socket.recv(1024).decode('ascii')
                if not data:
                    break
                response += data
            print(response)
            code, data = read_message(response)
            if code == 'ok':
                self.peers = eval(str(data))
                writePeers("cpeers.txt", self.peers)
        finally:
            initial_socket.close()

        for peer in self.peers:
            peer = eval(str(peer))
            self.request_top_block(peer_ip=peer[0], peer_port=peer[1])
        self.listen_requests()

    def request_top_block(self, peer_ip, peer_port):
        s = socket(AF_INET, SOCK_STREAM)
        try:
            s.connect((peer_ip, peer_port))
            s.send(write_message('get_top', None))
            s.shutdown(SHUT_WR)

            response = ''
            while True:
                data = s.recv(BUFFER).decode('ascii')
                if not data:
                    break
                response += data
            code, data = read_message(response)
            if code == 'top_block':
                block = rebuild_block(data)
                self.receive_block(block, peer_ip, peer_port)

        except ConnectionRefusedError:
            # self.peers.remove((peer_ip, peer_port))
            print(peer_ip, ':', peer_port, ' is unreachable')

    def receive_block(self, new_block, sender_ip, sender_port):
        last_block = self.blockchain.get_last()

        if new_block.index <= last_block.index:
            return False  # stale block

        else:
            # verifica o novo bloco e a chain a qual pertence, se diferente da atual
            self.validate_chain(new_block, sender_ip, sender_port)

    def request_block(self, block_hash, sender_ip, sender_port):
        s = socket(AF_INET, SOCK_STREAM)
        s.connect((sender_ip, sender_port))
        s.send(write_message('get_block', block_hash))
        s.shutdown(SHUT_WR)

        response = ''
        while True:
            data = s.recv(BUFFER).decode('ascii')
            if not data:
                break
            response += data
        code, data = read_message(response)
        if code == 'block':
            block = rebuild_block(data)
            return block
        return None

    def listen_requests(self):
        s = socket(AF_INET, SOCK_STREAM)
        s.bind(('', self.own_port))
        s.listen()

        while 1:
            conn, addr = s.accept()
            _thread.start_new_thread(self.route_request, (conn, addr))

    def send_transactions(self, receiving_address, ammount):
        for peer in self.peers:
            peer = eval(str(peer))
            _thread.start_new_thread(
                self.send_transaction,
                (peer[0], peer[1], receiving_address, ammount))

    def send_transaction(self, peer_ip, peer_port, receiving_address, amount):
        data = {self.address: -amount, receiving_address: amount}
        try:
            s = socket(AF_INET, SOCK_STREAM)
            s.connect((peer_ip, peer_port))
            s.send(write_message('transaction', data))
            s.shutdown(SHUT_WR)

            response = ''
            while True:
                data = s.recv(BUFFER).decode('ascii')
                if not data:
                    break
                response += data
            code, data = read_message(response)
            print(peer_ip, ':', peer_port, ' - ', code)

        except ConnectionRefusedError:
            print(peer_ip, ':', peer_port, ' is unreachable')

    def receive_transaction(self, peer_socket, transaction):
        if not self.miner:
            peer_socket.send(write_message('not_mining', None))
        elif len(self.transaction_pool) >= 9:
            peer_socket.send(write_message('full_block', None))
        elif self.accept_transaction(transaction):
            peer_socket.send(write_message('tr_accepted', None))
        peer_socket.close()

    def route_request(self, conn, addr):
        msg = ''
        while 1:
            data = conn.recv(BUFFER).decode('ascii')
            if not data:
                break
            msg += data
        code, data = read_message(msg)
        if code == 'get_block':
            block_hash = data
            data = self.blockchain.get_block(block_hash)
            conn.send(write_message('block', data))
        elif code == 'get_top':
            data = self.blockchain.get_last()
            conn.send(write_message('top_block', data))
        elif code == 'new_block':
            block = rebuild_block(data)
            self.receive_block(block, sender_ip=addr[0], sender_port=addr[1])
        elif code == 'transaction':
            self.receive_transaction(conn, data)
        conn.close()

    def accept_transaction(self, transaction):
        candidate_state = self.get_current_state().copy()

        if sum(transaction.values()) != 0:
            return False

        for address in transaction.keys():
            if address in candidate_state.keys():  # o endereço existe
                if candidate_state[address] - transaction[
                        address] >= 0:  # o endereço possue fundos suficientes
                    candidate_state[address] += transaction[address]
                else:
                    return False
            # se o endereço não existe mas a quantia é positiva
            elif transaction[address] > 0:
                # cria o endereço
                candidate_state[address] = transaction[address]
            else:  # a quantia é negativa
                return False

        self.transaction_pool.append(transaction)
        self.restart_miner()
        return True

    def start_miner(self):
        prev_hash = hash_string(str(self.blockchain.get_last()))
        self.miner = Miner(self, prev_hash, self.blockchain.get_size(),
                           self.transaction_pool)
        self.miner.start()

    def restart_miner(self):
        if self.miner:
            self.stop_miner()
            self.start_miner()

    def stop_miner(self):
        self.miner.stop()

    def get_current_state(self):
        if not self.current_state:
            return self.rebuild_current_state()
        return self.current_state

    # retorna um dict com todos os addresses existentes e seus fundos
    def rebuild_current_state(self):
        state = {}
        for transaction in self.blockchain.get_all_transactions():
            for address in transaction.keys():
                if address in state.keys():
                    state[address] += transaction[address]
                else:
                    state[address] = transaction[address]
        self.current_state = state
        return state

    def validate_chain(self, top_block, sender_ip, sender_port):
        self.lock.acquire(
        )  # locka a blockchain para que ela não seja alterada durante a verificação
        try:
            different_blocks = [top_block]
            top_index = top_block.index

            current_block = top_block
            # itera para encontrar blocos diferentes dos quais a blockchain atual armazena
            while self.blockchain.get_block(current_block.prev_hash) is None:
                # pede o bloco diferente
                current_block = self.request_block(current_block.prev_hash,
                                                   sender_ip, sender_port)
                top_index = current_block.index
                different_blocks.append(current_block)

            # itera sobre os blocos diferentes
            for block in different_blocks:
                if not self.validate_block(block):  # se o bloco não é valido
                    if top_index <= self.blockchain.get_size(
                    ):  # e o tamanho da chain recebida é menor que a atual
                        return  # não faz nada
                    else:  # a chain nova é maior e correta até certo ponto
                        break  # adiciona
                else:  # o bloco é válido
                    top_index = block.index

            self.add_new_blocks(
                different_blocks, top_index
            )  # adiciona os novos blocos até o maior índice válido
        finally:
            self.lock.release()

    def validate_block(self, block):
        block_hash = hash_string(str(block))
        if not verify_size(block):
            return False
        if not self.verify_difficulty(block_hash):
            return False
        if not self.verify_transactions(block):
            return False

        print(block_hash, " accepted as valid")
        return True

    def add_new_blocks(self, blocks, top_index):
        self.current_state = None  # inutiliza a referencia atual do estado
        self.transaction_pool = []
        self.restart_miner()

        for block in blocks:
            if block.index <= top_index:
                self.blockchain.add_block(block, block.index)

    def verify_difficulty(self, block_hash):
        first_chars = block_hash[:self.difficulty]
        first_chars = first_chars.replace('0', '')  # remove os zeros
        if first_chars:
            return False  # first_chars não está vazia
        return True

    def verify_transactions(self, block):
        current_state = self.get_current_state()
        candidate_state = current_state.copy()

        print(block.transactions)

        # valida a primeira transação
        if len(block.transactions[0].keys()) > 1 or sum(
                block.transactions[0].values()) > 10:
            return False

        # itera sobre as transações restantes
        for transaction in block.transactions[1:]:
            if sum(transaction.values()) != 0:
                return False

            for address in transaction.keys():
                if address in candidate_state.keys():  # o endereço existe
                    if candidate_state[address] - transaction[
                            address] >= 0:  # o endereço possue fundos suficientes
                        candidate_state[address] += transaction[address]
                    else:
                        return False
                # se o endereço não existe mas a quantia é positiva
                elif transaction[address] > 0:
                    # cria o endereço
                    candidate_state[address] = transaction[address]
                else:  # a quantia é negativa
                    return False

        return True
Пример #24
0
from Blockchain import Blockchain
from Miner import Miner
from Transaction import Transaction
from blockchain_utils import *
import jsonpickle

from utils import log, generate_malicious_chain

app = Flask(__name__)

blockchain = Blockchain()
test_names = ["special miner", "a miner"]
test_ips = ["http://192.168.1.108:5000", "http://192.168.1.108:5001"]
test_ports = [5000, 5001]
test = 0
miner = Miner(test_names[test], 0)
my_node_address = test_ips[
    test]  #"http://192.168.1.108:5001"#"http://197.55.175.10:5000"
# Address format : http://IP:port
peers = set()
if miner.name != "special miner":
    node_address = "http://192.168.1.108:5000"  #"http://197.160.27.226:5000"#"http://102.40.55.128:5000" # Special miner
    peers.add(node_address)
    if not node_address:
        log("main_miner", "Special miner address is not specified!", "error")
        raise Exception("Node address is not specified!")

    data = {"node_address": my_node_address}
    headers = {'Content-Type': "application/json"}
    response = requests.post(node_address + "/register_node",
                             data=json.dumps(data),
Пример #25
0
 def new_miners(self, amount, power):
     for i in range(amount):
         self.add_node(Miner(self, power))
Пример #26
0
from Miner import Miner
import time

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    miner = Miner()
    for x in range(1, 20):
        miner.update()
        time.sleep(1)

# See PyCharm help at https://www.jetbrains.com/help/pycharm/
Пример #27
0
import hashlib
import random
import time
import math
import json
import KeyGen
from Miner import Miner
from Users import user_db
from Blockchain import BlockChain
from Transaction import Transaction

if __name__ == "__main__":
    sutdcoin = BlockChain()
    users = list(user_db.keys())
    t1 = Transaction(users[0], users[2], 80, "user0 -(80)-> user2")
    t2 = Transaction(users[0], users[1], 30, "user0 -(30)-> user1")
    sutdcoin.add_transaction_to_pool([t1, t2])

    user3 = Miner(users[3], sutdcoin)
    user3.mine()

    print("\nsutdcoin blockchain graph:", sutdcoin.graph)
    print("\nsutdcoin user_db:", user_db)
Пример #28
0
includeReferralBonus = True

investments = [
    Investment(1800, '5/30/2018'),
    Investment(300, '5/30/2018'),
    Investment(300, '5/30/2018'),
    Investment(10, '6/4/2018'),
    Investment(10, '6/8/2018')
]

totalInvested = 0
for investiment in investments:
    totalInvested = totalInvested + investiment.amount

miners = [
    Miner(hashRate=40600, startDate='5/31/2018', days=90),
    Miner(hashRate=3450, startDate='6/4/2018', days=90),
    Miner(hashRate=1000, startDate='6/5/2018', days=90),
    Miner(hashRate=1270, startDate='6/7/2018', days=90),
    Miner(hashRate=1900, startDate='6/9/2018', days=90),
    Miner(hashRate=1540, startDate='6/11/2018', days=90),
    Miner(hashRate=1300, startDate='6/13/2018', days=90),
    Miner(hashRate=1070, startDate='6/14/2018', days=90),
    Miner(hashRate=3000, startDate='6/17/2018', days=90),
    Miner(hashRate=4800, startDate='6/27/2018', days=90),
    Miner(hashRate=6500, startDate='7/3/2018', days=90),
    Miner(hashRate=3700, startDate='7/7/2018', days=90),
    Miner(hashRate=11950, startDate='7/9/2018', days=90)
]

print "End Date                         Main        Referral       Total       Profit           %       Min Buy (GHS)"
Пример #29
0
from Miner import Miner
import sys
import time

m = Miner(int(sys.argv[1]), ["127.0.0.1"], [8000])

time.sleep(60)

m.blockchain.printBlockchainAndAll()
Пример #30
0
from Crypto import Random  # From Pycryptodome
import time  # For Runtime Analysis
from Difficulty import System  # Import basic System Class for checking proof-of-work
from Miner import Miner

Example_System = System(
)  # Object to check Proof-Of-Work 256 Bits , intitial Difficulty = 1
miner_count = 500  # Total Number of Miner Threads
RUNTIME = (120)  # For Burnout, Specify time
start_time = time.time()
miners = []

# Start all miners
for i in range(miner_count):
    x = Miner(Example_System, i)
    x.start()

time.sleep(RUNTIME)
stop_time = time.time()
hashes_count = Example_System.get_total_hashes()
block_count = Example_System.get_block_count()

for miner in miners:
    miner.halt_thread()

    # Stats and Math

time_elapsed = stop_time - start_time
hash_rate = (hashes_count / time_elapsed) / 1000
Пример #31
0
@app.route('/get_transactions', methods=['POST'])
def listening_to_my_transactions():
    user_pub_key = request.get_json()['pub']
    print(user_pub_key)
    # need to serialize transaction and then make on other side
    transactions_list = []
    data = {}
    # print(sutdcoin.blockchain_graph)
    last_block = sutdcoin.blockchain_graph[sutdcoin.longest_header]["block"]
    longest_chain = sutdcoin.createChainToParentBlock(last_block)
    longest_chain.insert(0, last_block)
    #blockchain_graph_items = sutdcoin.blockchain_graph.items()
    for block in longest_chain:
        for trans in block.merkle_tree.past_transactions:
            if trans.sender == user_pub_key or trans.receiver == user_pub_key:
                nodes, neighbour, index = block.merkle_tree.get_min_nodes(
                    trans)
                transactions_list.append(
                    [trans.serialize(), nodes, neighbour, index])

    data['transaction_list'] = transactions_list
    print("THE TRANSACTION LIST IS:", data)
    data = json.dumps(data)
    return data, 200


if __name__ == '__main__':
    myMiner = Miner(pub_key, sutdcoin)
    app.run(host="0.0.0.0", port=args.port, debug=True)
import hashing
from Wallet import Wallet
from Blockchain import get_blockchain
from Miner import Miner

if __name__ == "__main__":
    print(hashing.hash("Jetzt liken und abonnieren!!! The Morpheus Tutorials :)"))
    w = Wallet()
    print(w.public_key)
    print(w.private_key)
    print(w.password)
    print(w.send_money([w.public_key], [50]))
    print(get_blockchain().get_json())
    miner = Miner(own_public_key=w.public_key)