Example #1
0
def render_block_header(hdr):
    html = "<table>"

    html += "<tr><th>" + "Height" + "</th>"
    html += "<td>" + str(hdr.height) + "</td></tr>"

    html += "<tr><th>" + "Block Hash" + "</th>"
    html += "<td>" + dhash(hdr) + "</td></tr>"

    html += "<tr><th>" + "Prev Block Hash" + "</th>"
    html += "<td>" + str(hdr.prev_block_hash) + "</td></tr>"

    html += "<tr><th>" + "Merkle Root" + "</th>"
    html += "<td>" + str(hdr.merkle_root) + "</td></tr>"

    html += "<tr><th>" + "Timestamp" + "</th>"
    html += ("<td>" + str(
        datetime.fromtimestamp(hdr.timestamp).strftime("%d-%m-%Y %H:%M:%S")) +
             " (" + str(hdr.timestamp) + ")</td></tr>")

    # get block
    block = Block.from_json(get_block_from_db(dhash(hdr))).object()

    html += "<tr><th>" + "Transactions" + "</th>"
    html += "<td>" + str(len(block.transactions)) + "</td></tr>"

    # for i, transaction in enumerate(block.transactions):
    #     s = "coinbase: " + str(transaction.is_coinbase) + ", fees: " + str(transaction.fees)
    #     html += "<tr><th>Transaction " + str(i) + "</th><td>" + str(s) + "</td></tr>"

    html += "</table>"
    return str(html)
Example #2
0
def process_new_block(request_data: bytes) -> str:
    global BLOCKCHAIN
    block_json = decompress(request_data)
    if block_json:
        try:
            block = Block.from_json(block_json).object()
            # Check if block already exists
            if get_block_from_db(dhash(block.header)):
                logger.info("Server: Received block exists, doing nothing")
                return "Block already Received Before"
            if BLOCKCHAIN.add_block(block):
                logger.info(
                    "Server: Received a New Valid Block, Adding to Chain")

                logger.debug("Server: Sending new block to peers")
                # Broadcast block to other peers
                send_to_all_peers("/newblock", request_data)
            else:
                return "Block Received, but was not added, due to some error"
        except Exception as e:
            logger.error("Server: New Block: invalid block received " + str(e))
            return "Invalid Block Received"

        # Kill Miner
        t = Timer(1, miner.stop_mining)
        t.start()
        return "Block Received"
    logger.error("Server: Invalid Block Received")
    return "Invalid Block"
Example #3
0
 def build_from_header_list(cls, hlist: List[BlockHeader]):
     nchain = cls()
     nchain.header_list = []
     for header in hlist:
         block = Block.from_json(get_block_from_db(dhash(header))).object()
         nchain.add_block(block)
     return nchain
Example #4
0
def block(blockhash):
    log_ip(request, inspect.stack()[0][3])
    try:
        block = Block.from_json(get_block_from_db(blockhash)).object()
    except Exception as e:
        logger.debug("BLOCK/blockhash: " + str(e))
        return template("error.html")
    return template("block.html", block=block)
Example #5
0
def cached_get_block(headerhash: str) -> str:
    if headerhash:
        db_block = get_block_from_db(headerhash)
        if db_block:
            return compress(db_block)
        else:
            logger.error("ERROR CALLED GETBLOCK FOR NON EXISTENT BLOCK")
    return "Invalid Hash"
Example #6
0
 def build_from_header_list(self, hlist: List[str]):
     try:
         for header in hlist:
             block = Block.from_json(get_block_from_db(header)).object()
             if block:
                 self.add_block(block)
             else:
                 logger.error("Blockchain: Block does not exist in DB")
     except Exception as e:
         logger.error("Blockchain: Exception " + str(e))
Example #7
0
def explorer():
    log_ip(request, inspect.stack()[0][3])
    prev = int(request.query.prev or 0)
    if prev < 0:
        prev = 0
    hdr_list = list(reversed(BLOCKCHAIN.active_chain.header_list))
    indexes = [i for i in range(prev * 8, (prev + 1) * 8) if i < len(hdr_list)]
    blocks = [Block.from_json(get_block_from_db(dhash(hdr_list[i]))).object() for i in indexes]
    transactions = list(BLOCKCHAIN.mempool)
    return template("explorer.html", blocks=blocks, transactions=transactions, prev=prev)
Example #8
0
def transaction(blockhash, txhash):
    log_ip(request, inspect.stack()[0][3])
    try:
        block = Block.from_json(get_block_from_db(blockhash)).object()
        tx = None
        for t in block.transactions:
            if t.hash() == txhash:
                tx = t
    except Exception as e:
        logger.debug("Transaction/bhash/tx: " + str(e))
        return template("error.html")
    return template("transaction.html", tx=tx, block=block)
Example #9
0
def get_cc_co_cp_by_contract_address(
        contract_address: str) -> Tuple[str, str, str]:
    global BLOCKCHAIN

    tx_history = BLOCKCHAIN.active_chain.transaction_history
    txns = tx_history.get(contract_address)
    if len(txns) == 0:
        header_list = read_header_list_from_db()
        for header in reversed(header_list):
            block = Block.from_json(get_block_from_db(header)).object()
            for tx in block.transactions:
                if tx.get_contract_address() == contract_address:
                    return tx.contract_code, tx.contract_output, tx.contract_priv_key
    else:
        for tx in txns:
            tx = json.loads(tx)
            cc = tx.get('contract_code', '')
            if cc != '':
                return cc, tx.get('contract_output',
                                  ''), tx.get('contract_priv_key', '')
    return '', '', ''
Example #10
0
def checkblock():
    log_ip(request, inspect.stack()[0][3])
    headerhash = request.forms.get("headerhash")
    if get_block_from_db(headerhash):
        return json.dumps(True)
    return json.dumps(False)
Example #11
0
 def build_utxo(self):
     for header in self.header_list:
         block = Block.from_json(get_block_from_db(dhash(header))).object()
         self.update_utxo(block)
Example #12
0
def getblock():
    hhash = request.form.get("headerhash")
    if hhash:
        return get_block_from_db(hhash)
    return "Hash hi nahi bheja LOL"