Example #1
0
def add_block_nondel():
    context = zmq.Context()
    zsocket = context.socket(zmq.REP)
    zsocket.bind("tcp://127.0.0.1:%s" % settings.ELECTION_ZMQ_PORT)
    zpoll = zmq.Poller()
    zpoll.register(zsocket)
    start_timestamp = time.time()
    all_blocks = []
    while time.time() - start_timestamp < 3:
        events = dict(zpoll.poll(1))
        for key in events:
            block = json.loads(key.recv_string())
            all_blocks.append(block)
            zsocket.send_string("got some block")
    zpoll.unregister(zsocket)
    zsocket.close()
    context.destroy()
    # get most common and add to chain
    if len(all_blocks) > 0:
        mr = []
        for blk in all_blocks:
            mr.append(blk.merkle_root)
        # run full blockchain verif
        blkc = BlockChain()
        Mblock = bestblock(mr)
        blkc.add_block(Mblock)
Example #2
0
def mining():
    elec = Election()
    if elec.redis_client.llen("mempool") == 0:
        return

    # Transaction verification 
    blk = Block()
    for i in range(0, elec.redis_client.llen("mempool")):
        tx = elec.redis_client.lindex('mempool', i).decode('utf-8')
        if tx == None:
            # check
            break
        verify_verdict = elec.verification.verify_tx(tx)
        if verify_verdict == "verified":
            # Sending data to block
            blk.add_transaction(tx)

    # create block
    blk.compute_hash()
    blk.calculate_merkle_root()
    block = blk.to_json()

    # add block
    blkChain = BlockChain()
    blkChain.add_block(block)

    # full blockchain verify
    full_verify_message = elec.verification.full_chain_verify()
    if full_verify_message == "verified":
        # braodcast the block you made
        UDPHandler.sendblock(block)
    else:
        return
Example #3
0
 def getblockbyheight(self, data=None):
     blkc = BlockChain()
     block = blkc.get_block(data)
     if block is not None:
         return json.dumps({"block": block.to_json()})
     else:
         return json.dumps({"error": "Block not found at this height"})
Example #4
0
    def gettxbyhash(self, data=None):
        blkc = BlockChain()
        tx = blkc.get_tx_by_hash(data)
        blkc.close()

        if tx is not None:
            return json.dumps({"tx": tx.to_json()})
        else:
            return json.dumps({"error": "Transaction not found"})
Example #5
0
    def getallutxobyaddress(self, data=None):
        blkc = BlockChain()
        utxos_tuple = blkc.get_utxos_by_addr(data)
        response = [{
            "tx": utxo[0],
            "index": utxo[1],
            "amount": utxo[2]
        } for utxo in utxos_tuple]

        return json.dumps({"utxos": response})
Example #6
0
    def create_block(self):
        block = Block()
        block.create_coinbase_transaction()
        mempool = Mempool()
        blkc = BlockChain()

        mempool_size = mempool.get_len()
        if mempool_size == 0:
            return
        while mempool_size > 0:
            tx = mempool.get_transaction()
            block.add_transaction(tx)
            mempool_size -= 1
        
        block.calcalute_block_size()
        block.calculate_merkle_root()
        block.compute_hash()
        blkc.add_block(block)
Example #7
0
 def __init__(self):
     self.primary_representatives = dict()
     self.blockchain = BlockChain()
     self.fund_addr = ""
     self.redis_client = redis.Redis(host='localhost', port=6379, db=0)
     self.redis_client.hmset('fund ' + self.fund_addr, {'total fund': 00})
     self.this_node_addr = get_own_ip()
     self.stakes_map = dict()
     self.votes_map = dict()
     self.verification = Verification()
     self.load_election_fund_details()
    def test_txs_by_address(self):
        blockchain = BlockChain()
        blockchain.flush_chain()
        block = Block()
        tx = Transaction()
        input1 = TransactionInput()
        input1.address = "test_address"
        tx.add_input(input1)
        tx.generate_hash()
        block.add_transaction(tx)

        tx1 = Transaction()
        output = TransactionOutput()
        output.address = "fake_address"
        output1 = TransactionOutput()
        output1.address = "test_address"
        tx1.add_output(output)
        tx1.add_output(output1)
        tx1.generate_hash()
        block.add_transaction(tx1)

        tx2 = Transaction()
        output2 = TransactionOutput()
        output2.address = "fake_address"
        tx2.add_output(output2)
        tx2.generate_hash()
        
        block.add_transaction(tx2)
        block.compute_hash()

        blockchain.add_block(block)
        txs = blockchain.get_txs_by_addr("test_address")
        getb = blockchain.get_block(-1)
        print(getb.to_json())
        for tx in txs:
            print(tx.hash, end='\n')

        self.assertEqual(len(txs), 2)
        blockchain.close()
Example #9
0
 def gettxsbyaddress(self, data=None):
     blkc = BlockChain()
     txs = [tx.to_json() for tx in blkc.get_txs_by_addr(data)]
     blkc.close()
     return json.dumps({"txs": txs})
Example #10
0
 def getaddressbalance(self, data=None):
     blkc = BlockChain()
     balance = blkc.final_addr_balance(data)
     blkc.close()
     return json.dumps({"balance": balance})
Example #11
0
 def __init__(self):
     blockchain = BlockChain()
     self.block = Block()
     self.redis_client = redis.Redis(host='localhost', port=6379, db=0)
     self.chain_length = self.redis_client.llen('chain')