Exemple #1
0
def transaction_spent(thash):
    data = Transaction().spent(thash)
    outputs = []

    if data["error"] is None:
        result = data["result"]
        for output in result:
            item = {"spent": output["spent"]}

            if output["spent"]:
                block = Block().height(output["height"])["result"]

                item["txid"] = output["txid"]
                item["vin"] = output["vin"]
                item["status"] = {
                    "confirmed": True,
                    "block_height": block["height"],
                    "block_hash": block["hash"],
                    "block_time": block["time"]
                }

            outputs.append(item)

        return jsonify(outputs)

    else:
        return Response("Transaction not found",
                        mimetype="text/plain",
                        status=404)
def subscription_loop():
    bestblockhash = None
    mempool = []

    while True:
        data = General().info()
        if "result" in data:
            if "bestblockhash" in data["result"]:
                if data["result"]["bestblockhash"] != bestblockhash:
                    bestblockhash = data["result"]["bestblockhash"]

                    sio.emit("block.update",
                             utils.response({
                                 "height": data["result"]["blocks"],
                                 "hash": bestblockhash
                             }),
                             room="blocks")

                    updates = Block().inputs(bestblockhash)
                    for address in updates:
                        mempool = list(set(mempool) - set(updates[address]))

                        sio.emit("address.update",
                                 utils.response({
                                     "address":
                                     address,
                                     "tx":
                                     updates[address],
                                     "height":
                                     data["result"]["blocks"],
                                     "hash":
                                     bestblockhash
                                 }),
                                 room=address)

                data = General().mempool()
                temp_mempool = []

                if not data["error"]:
                    updates = Transaction.addresses(data["result"]["tx"])
                    for address in updates:
                        updates[address] = list(
                            set(updates[address]) - set(mempool))
                        temp_mempool += updates[address]

                        if len(updates[address]) > 0:
                            sio.emit("address.update",
                                     utils.response({
                                         "address": address,
                                         "tx": updates[address],
                                         "height": None,
                                         "hash": None
                                     }),
                                     room=address)

                mempool = list(set(mempool + temp_mempool))

        sio.sleep(0)
Exemple #3
0
def broadcast_tx():
    raw = request.data.decode("utf-8")
    data = Transaction().broadcast(raw)

    if data["error"] is None:
        return Response(data["result"], mimetype="text/plain")

    return Response(data["error"]["message"],
                    mimetype="text/plain",
                    status=400)
Exemple #4
0
def transaction_info(thash):
    data = Transaction().info(thash)

    if data["error"] is None:
        result = data["result"]
        return Esplora().transaction(result)

    else:
        return Response("Transaction not found",
                        mimetype="text/plain",
                        status=404)
Exemple #5
0
def mempool_recent():
    data = General().mempool()
    result = []

    for txid in data["result"]["tx"]:
        transaction = Transaction().info(txid)["result"]
        item = Esplora().transaction(transaction)

        result.append({
            "txid": item["txid"],
            "fee": item["fee"],
            "vsize": item["weight"],
            "value": item["value"]
        })

    return jsonify(result)
Exemple #6
0
def init():
    bestblockhash = None

    while True:
        data = General().info()
        if data['result']['bestblockhash'] != bestblockhash:
            bestblockhash = data['result']['bestblockhash']
            sio.emit('block.update',
                     utils.response({
                         'height': data['result']['blocks'],
                         'hash': bestblockhash
                     }),
                     room='blocks')

            updates = Block().inputs(bestblockhash)
            for address in updates:
                mempool = list(set(state.mempool) - set(updates[address]))
                if address in state.rooms:
                    sio.emit('address.update',
                             utils.response({
                                 'address': address,
                                 'tx': updates[address],
                                 'height': data['result']['blocks'],
                                 'hash': bestblockhash
                             }),
                             room=address)

        data = General().mempool()
        updates = Transaction().addresses(data['result']['tx'])
        temp_mempool = []
        for address in updates:
            updates[address] = list(set(updates[address]) - set(mempool))
            temp_mempool += updates[address]
            if address in state.rooms:
                if len(updates[address]) > 0:
                    sio.emit('address.update',
                             utils.response({
                                 'address': address,
                                 'tx': updates[address],
                                 'height': None,
                                 'hash': None
                             }),
                             room=address)

        mempool = list(set(mempool + temp_mempool))
Exemple #7
0
def address_transactions(address, thash):
    data = Address().history(address)
    transactions = []
    start = 0

    if data["error"] is None:
        result = data["result"]

        if thash in result["tx"]:
            start = result["tx"].index(thash) + 1

        for thash in result["tx"][start:start + config.tx_page]:
            transaction = Transaction().info(thash)["result"]
            transactions.append(Esplora().transaction(transaction))

        return jsonify(transactions)

    else:
        return Response("Invalid Bitcoin address",
                        mimetype="text/plain",
                        status=400)
Exemple #8
0
def block_transactions(bhash, start=0):
    data = Block().hash(bhash)
    transactions = []

    if start % config.tx_page != 0:
        return Response(
            f"start index must be a multipication of {config.tx_page}",
            mimetype="text/plain",
            status=400)

    if data["error"] is None:
        result = data["result"]

        for thash in result["tx"][start:start + config.tx_page]:
            transaction = Transaction().info(thash)["result"]
            transactions.append(Esplora().transaction(transaction))

        return jsonify(transactions)

    else:
        return Response("Block not found", mimetype="text/plain", status=404)
Exemple #9
0
 def inputs(cls, bhash: str):
     data = cls.hash(bhash)
     return Transaction().addresses(data["result"]["tx"])
Exemple #10
0
def TransactionInfo(thash=None):
    return Transaction.info(thash)
Exemple #11
0
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('raw', type=str, default="")
        args = parser.parse_args()

        return Transaction().broadcast(args['raw'])
Exemple #12
0
 def get(self, thash):
     return Transaction().info(thash)
 def inputs(cls, bhash: str):
     data = cls.hash(bhash)
     return Transaction().addresses(data['result']['tx'])
Exemple #14
0
 def get(self, raw):
     return Transaction().decode(raw)
Exemple #15
0
def transaction_info(thash):
    return jsonify(Transaction().info(thash))
Exemple #16
0
def broadcast():
    raw = request.values.get("raw")
    return Transaction().broadcast(raw)
Exemple #17
0
def TransactionInfo(thash: str):
    return Transaction().info(thash)
Exemple #18
0
def Broadcast(raw=None):
    return Transaction.broadcast(raw)
Exemple #19
0
def Broadcast(raw: str):
    return Transaction().broadcast(raw)
Exemple #20
0
def TransactionBatch(hashes=[]):
    result = []
    for thash in hashes:
        result.append(Transaction.info(thash))

    return utils.response(result)
Exemple #21
0
def decode_raw_tx(raw):
    return jsonify(Transaction().decode(raw))