mirror of
https://github.com/mynodebtc/mynode.git
synced 2024-11-12 08:29:16 +00:00
Remove old explorer code
This commit is contained in:
parent
1ba0e93700
commit
304c1fd88e
|
@ -15,88 +15,6 @@ import time
|
||||||
mynode_bitcoind = Blueprint('mynode_bitcoind',__name__)
|
mynode_bitcoind = Blueprint('mynode_bitcoind',__name__)
|
||||||
|
|
||||||
|
|
||||||
### Helper functions
|
|
||||||
def reverse_hash(btchash):
|
|
||||||
rev = ""
|
|
||||||
pair = ""
|
|
||||||
for c in btchash[::-1]:
|
|
||||||
pair = c + pair
|
|
||||||
if len(pair) == 2:
|
|
||||||
rev += pair
|
|
||||||
pair = ""
|
|
||||||
return rev
|
|
||||||
|
|
||||||
def get_scripthash_for_address(addr):
|
|
||||||
if addr.isalnum():
|
|
||||||
try:
|
|
||||||
ret = check_output(["/usr/bin/get_scripthash.py",addr])
|
|
||||||
return ret.strip()
|
|
||||||
except:
|
|
||||||
raise Exception( "{} is not a valid BTC address!".format(addr) )
|
|
||||||
raise Exception('Invalid BTC Address!')
|
|
||||||
|
|
||||||
def is_bitcoin_address(addr):
|
|
||||||
if addr.isalnum():
|
|
||||||
try:
|
|
||||||
check_call(["/usr/bin/get_scripthash.py",addr])
|
|
||||||
return True
|
|
||||||
except:
|
|
||||||
return False
|
|
||||||
raise Exception('Invalid BTC Address!')
|
|
||||||
|
|
||||||
def search(search_term):
|
|
||||||
try:
|
|
||||||
rpc_user = get_bitcoin_rpc_username()
|
|
||||||
rpc_pass = get_bitcoin_rpc_password()
|
|
||||||
rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_pass), timeout=10)
|
|
||||||
results = {}
|
|
||||||
results["type"] = "not_found"
|
|
||||||
results["id"] = ""
|
|
||||||
search_term = search_term.strip()
|
|
||||||
|
|
||||||
# Try to get a block (by height)
|
|
||||||
try:
|
|
||||||
if (search_term.isdigit()):
|
|
||||||
blockhash = rpc_connection.getblockhash(int(search_term))
|
|
||||||
results["type"] = "block"
|
|
||||||
results["id"] = blockhash
|
|
||||||
return results
|
|
||||||
except JSONRPCException as e:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Try to get address
|
|
||||||
try:
|
|
||||||
if is_bitcoin_address(search_term):
|
|
||||||
results["type"] = "addr"
|
|
||||||
results["id"] = search_term
|
|
||||||
return results
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Try to get a block (by hash)
|
|
||||||
try:
|
|
||||||
block = rpc_connection.getblock(search_term)
|
|
||||||
results["type"] = "block"
|
|
||||||
results["id"] = search_term
|
|
||||||
return results
|
|
||||||
except JSONRPCException as e:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Try to get a transaction
|
|
||||||
try:
|
|
||||||
rawtx = rpc_connection.getrawtransaction(search_term)
|
|
||||||
results["type"] = "tx"
|
|
||||||
results["id"] = search_term
|
|
||||||
return results
|
|
||||||
except JSONRPCException as e:
|
|
||||||
pass
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
results["type"] = "error"
|
|
||||||
results["error_message"] = str(e)
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def runcmd(cmd):
|
def runcmd(cmd):
|
||||||
cmd = "bitcoin-cli --conf=/home/admin/.bitcoin/bitcoin.conf --datadir=/mnt/hdd/mynode/bitcoin "+cmd+"; exit 0"
|
cmd = "bitcoin-cli --conf=/home/admin/.bitcoin/bitcoin.conf --datadir=/mnt/hdd/mynode/bitcoin "+cmd+"; exit 0"
|
||||||
try:
|
try:
|
||||||
|
@ -270,249 +188,6 @@ def bitcoind_config_page():
|
||||||
}
|
}
|
||||||
return render_template('bitcoind_config.html', **templateData)
|
return render_template('bitcoind_config.html', **templateData)
|
||||||
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/explorer")
|
|
||||||
def bitcoind_explorer_page():
|
|
||||||
check_logged_in()
|
|
||||||
|
|
||||||
# Get current information
|
|
||||||
try:
|
|
||||||
info = get_bitcoin_blockchain_info()
|
|
||||||
blockdata = get_bitcoin_recent_blocks()
|
|
||||||
mempool = get_bitcoin_mempool()
|
|
||||||
|
|
||||||
# 10 most recent blocks
|
|
||||||
blocks = []
|
|
||||||
for b in blockdata:
|
|
||||||
block = b
|
|
||||||
minutes = int(time.time() - int(b["time"])) / 60
|
|
||||||
block["age"] = "{} minutes".format(minutes)
|
|
||||||
block["size"] = int(b["size"] / 1000)
|
|
||||||
blocks.append(block)
|
|
||||||
blocks.reverse()
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error communicating with bitcoind. Node may be busy syncing.<br/><br/>{}".format(str(e))),
|
|
||||||
"back_url": "/",
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Status",
|
|
||||||
"blocks": blocks,
|
|
||||||
"difficulty": "{:.3g}".format(info["difficulty"]),
|
|
||||||
"block_num": info["blocks"],
|
|
||||||
"header_num": info["headers"],
|
|
||||||
"disk_size": (int(info["size_on_disk"]) / 1000 / 1000 / 1000),
|
|
||||||
"mempool_tx": mempool["size"],
|
|
||||||
"mempool_size": "{:.3} MB".format(float(mempool["bytes"]) / 1000 / 1000),
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_explorer.html', **templateData)
|
|
||||||
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/explorer/search", methods=['POST'])
|
|
||||||
def search_page():
|
|
||||||
check_logged_in()
|
|
||||||
|
|
||||||
if not request:
|
|
||||||
return redirect("/explorer")
|
|
||||||
|
|
||||||
results = search(request.form['search'])
|
|
||||||
if results["type"] == "block":
|
|
||||||
return redirect("/explorer/block/{}".format(results["id"]))
|
|
||||||
elif results["type"] == "tx":
|
|
||||||
return redirect("/explorer/tx/{}".format(results["id"]))
|
|
||||||
elif results["type"] == "addr":
|
|
||||||
return redirect("/explorer/addr/{}".format(results["id"]))
|
|
||||||
elif results["type"] == "not_found":
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode BTC Bitcoin Error",
|
|
||||||
"message": Markup("Not Found<br/>{}".format(request.form['search'])),
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
elif results["type"] == "error":
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error<br/>{}".format(results["error_message"])),
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error - unknown return: {}".format(results["type"])),
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/explorer/tx/<txid>")
|
|
||||||
def tx_page(txid):
|
|
||||||
check_logged_in()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get info
|
|
||||||
electrum_data = get_from_electrum("blockchain.transaction.get", [txid, True])
|
|
||||||
tx = electrum_data['result']
|
|
||||||
|
|
||||||
inputs = []
|
|
||||||
outputs = []
|
|
||||||
total = 0
|
|
||||||
for i in tx["vin"]:
|
|
||||||
if "coinbase" in i:
|
|
||||||
inputs.append("New Coins")
|
|
||||||
else:
|
|
||||||
data = get_from_electrum("blockchain.transaction.get", [i["txid"], True])
|
|
||||||
tx_data = data['result']
|
|
||||||
inputs.append(tx_data["vout"][ i["vout"] ]["scriptPubKey"]["addresses"][0])
|
|
||||||
for o in tx["vout"]:
|
|
||||||
temp = {}
|
|
||||||
if "scriptPubKey" in o:
|
|
||||||
s = o["scriptPubKey"]
|
|
||||||
if "type" in s and s["type"] != "nulldata":
|
|
||||||
if "addresses" in s:
|
|
||||||
temp["address"] = s["addresses"][0]
|
|
||||||
else:
|
|
||||||
temp["address"] = "Unable to decode address"
|
|
||||||
temp["amount"] = o["value"]
|
|
||||||
total += o["value"]
|
|
||||||
outputs.append(temp)
|
|
||||||
|
|
||||||
confirmed = False
|
|
||||||
confirmations = "Unconfirmed"
|
|
||||||
block_height = 0
|
|
||||||
block_date = ""
|
|
||||||
if "confirmations" in tx:
|
|
||||||
confirmations = tx["confirmations"]
|
|
||||||
confirmed = True
|
|
||||||
if confirmed:
|
|
||||||
#block_height = tx["???"]
|
|
||||||
t = time.gmtime( int(tx["blocktime"]) )
|
|
||||||
block_date = time.strftime("%Y-%m-%d %H:%M:%S", t)
|
|
||||||
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin",
|
|
||||||
"heading": "Transaction",
|
|
||||||
"raw": pformat(tx, indent=4),
|
|
||||||
"txid": txid,
|
|
||||||
"confirmations": confirmations,
|
|
||||||
"size": tx["size"],
|
|
||||||
"weight": tx["weight"],
|
|
||||||
"confirmed": confirmed,
|
|
||||||
"block_hash": tx["blockhash"],
|
|
||||||
"block_height": tx,
|
|
||||||
"block_date": block_date,
|
|
||||||
"total": total,
|
|
||||||
"inputs": inputs,
|
|
||||||
"outputs": outputs,
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_tx.html', **templateData)
|
|
||||||
except Exception as e:
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error retreiving or parsing transaction.<br/><br/>{}".format(str(e))),
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/explorer/block/<block_hash>")
|
|
||||||
def block_page(block_hash):
|
|
||||||
check_logged_in()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get info
|
|
||||||
rpc_user = get_bitcoin_rpc_username()
|
|
||||||
rpc_pass = get_bitcoin_rpc_password()
|
|
||||||
rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_pass), timeout=10)
|
|
||||||
block = rpc_connection.getblock(block_hash)
|
|
||||||
|
|
||||||
txs = []
|
|
||||||
for t in block["tx"]:
|
|
||||||
txs.append(t)
|
|
||||||
|
|
||||||
t = time.gmtime( int(block["time"]) )
|
|
||||||
tstring = time.strftime("%Y-%m-%d %H:%M:%S", t)
|
|
||||||
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin",
|
|
||||||
"raw": pformat(block, indent=2),
|
|
||||||
"height": block["height"],
|
|
||||||
"hash": block["hash"],
|
|
||||||
"confirmations": block["confirmations"],
|
|
||||||
"num_tx": block["nTx"],
|
|
||||||
"difficulty": "{:.3g}".format(block["difficulty"]),
|
|
||||||
"size": int(block["size"] / 1000),
|
|
||||||
"date": tstring,
|
|
||||||
"txs": txs,
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_block.html', **templateData)
|
|
||||||
except Exception as e:
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error communicating with bitcoind. Node may be busy syncing.<br/><br/>{}".format(str(e))),
|
|
||||||
"back_url": "/bitcoind",
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/explorer/addr/<addr>")
|
|
||||||
def address_page(addr):
|
|
||||||
check_logged_in()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get addr info
|
|
||||||
script_hash = get_scripthash_for_address(addr)
|
|
||||||
|
|
||||||
rev = reverse_hash(script_hash)
|
|
||||||
data = get_from_electrum('blockchain.scripthash.get_balance', rev)
|
|
||||||
|
|
||||||
confirmed_bal = data["result"]["confirmed"]
|
|
||||||
if confirmed_bal != 0:
|
|
||||||
confirmed_bal = float(confirmed_bal) / 100000000
|
|
||||||
unconfirmed_bal = data["result"]["unconfirmed"]
|
|
||||||
if unconfirmed_bal != 0:
|
|
||||||
unconfirmed_bal = float(unconfirmed_bal) / 100000000
|
|
||||||
|
|
||||||
# Get addr TXs
|
|
||||||
txdata = get_from_electrum('blockchain.scripthash.get_history', rev)
|
|
||||||
unconfirmed = []
|
|
||||||
confirmed = []
|
|
||||||
for t in txdata['result']:
|
|
||||||
if t["height"] == 0:
|
|
||||||
unconfirmed.append(t)
|
|
||||||
else:
|
|
||||||
confirmed.append(t)
|
|
||||||
confirmed = list(reversed(confirmed))
|
|
||||||
txs = unconfirmed + confirmed
|
|
||||||
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin",
|
|
||||||
"address": addr,
|
|
||||||
"confirmed_balance": confirmed_bal,
|
|
||||||
"unconfirmed_balance": unconfirmed_bal,
|
|
||||||
"txs": txs,
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_address.html', **templateData)
|
|
||||||
except Exception as e:
|
|
||||||
templateData = {
|
|
||||||
"title": "myNode Bitcoin Error",
|
|
||||||
"message": Markup("Error communicating with bitcoind. Node may be busy syncing.<br/><br/>{}".format(str(e))),
|
|
||||||
"back_url": "/bitcoind",
|
|
||||||
"ui_settings": read_ui_settings()
|
|
||||||
}
|
|
||||||
return render_template('bitcoind_error.html', **templateData)
|
|
||||||
|
|
||||||
|
|
||||||
@mynode_bitcoind.route("/bitcoind/cli")
|
@mynode_bitcoind.route("/bitcoind/cli")
|
||||||
def bitcoincli():
|
def bitcoincli():
|
||||||
check_logged_in()
|
check_logged_in()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user