pyblock/PyBlock.py

1231 lines
38 KiB
Python
Raw Normal View History

2020-05-10 21:11:21 -03:00
#Developer: Curly60e
#PyBLOCK its a clock of the Bitcoin blockchain.
2020-06-19 17:51:28 -03:00
#Version: 0.5.0
2020-05-10 21:11:21 -03:00
2020-05-06 16:34:55 -03:00
import os
import os.path
2020-05-06 16:34:55 -03:00
import time as t
import pickle
import psutil
2020-05-29 11:52:29 -03:00
import qrcode
2020-06-19 17:51:28 -03:00
import random
from clone import *
from donation import *
from feed import *
from art import *
from logos import *
from sysinf import *
from pblogo import *
from apisnd import *
2020-06-19 17:51:28 -03:00
from ppi import *
from nodeconnection import *
2020-05-29 11:52:29 -03:00
from terminal_matrix.matrix import *
2020-05-06 16:34:55 -03:00
def sysinfo(): #Cpu and memory usage
print(" \033[0;37;40m----------------------")
print(" \033[3;33;40mCPU Usage: \033[1;32;40m" + str(psutil.cpu_percent()) + "%\033[0;37;40m")
print(" \033[3;33;40mMemory Usage: \033[1;32;40m" "{}% \033[0;37;40m".format(int(psutil.virtual_memory().percent)))
print(" \033[0;37;40m----------------------")
2020-06-12 22:51:15 -03:00
def getblock(): # get access to bitcoin-cli with the command getblockchaininfo
bitcoincli = " getblockchaininfo"
a = os.popen(path['bitcoincli'] + bitcoincli).read()
b = json.loads(a)
d = b
print(d)
clear()
print("\033[1;32;40m")
blogo()
print("\033[0;37;40m")
print("<<< Back to the Main Menu Press Control + C.\n\n")
print("\n----------------------------------------------------------------------------------------------------------------")
print("""
Chain: {}
Blocks: {}
Best BlockHash: {}
Difficulty: {}
Verification Progress: {}
Size on Disk: {}
Pruned: {}
""".format(d['chain'], d['blocks'], d['bestblockhash'], d['difficulty'], d['verificationprogress'], d['size_on_disk'], d['pruned']))
print("----------------------------------------------------------------------------------------------------------------\n")
def getblockcount(): # get access to bitcoin-cli with the command getblockcount
bitcoincli = " getblockcount"
os.system(path['bitcoincli'] + bitcoincli)
def clear(): # clear the screen
os.system('cls' if os.name=='nt' else 'clear')
2020-06-10 19:02:49 -03:00
def getgenesis(): # get and decode Genesis block
bitcoincli = " getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 0 | xxd -r -p | hexyl -n 256"
os.system(path['bitcoincli'] + bitcoincli)
2020-06-10 19:02:49 -03:00
def close():
print("<<< Back to the Main Menu Press Control + C.\n\n")
2020-06-10 19:02:49 -03:00
def readHexBlock(): # Hex Decoder using Hexyl on local node
hexa = input("Add the Block Hash you want to decode: ")
blocknumber = input("Add the Block number: ")
decodeBlock = path['bitcoincli'] + " getblock {} {}".format(hexa, blocknumber) + " | xxd -r -p | hexyl -n 256"
os.system(decodeBlock)
2020-06-10 19:02:49 -03:00
def readHexTx(): # Hex Decoder using Hexyl on an external node
hexa = input("Add the Transaction ID. you want to decode: ")
decodeTX = path['bitcoincli'] + " getrawtransaction {}".format(hexa) + " | xxd -r -p | hexyl -n 256"
os.system(decodeTX)
2020-06-10 19:02:49 -03:00
def prt():
print("\033[1;32;40m")
blogo()
print("\033[0;37;40m")
def tmp():
t.sleep(15)
def console(): # get into the console from bitcoin-cli
print("\t\033[0;37;40mThis is \033[1;33;40mBitcoin-cli's \033[0;37;40mconsole. Type your respective commands you want to display.\n\n")
while True:
cle = input("\033[1;32;40mconsole $>: \033[0;37;40m")
lsd = os.popen(path['bitcoincli'] + " " + cle)
lsd0 = lsd.read()
lsd1 = str(lsd0)
print(lsd1)
lsd.close()
2020-05-29 11:52:29 -03:00
def screensv():
try:
doit()
except (KeyboardInterrupt, SystemExit):
matrix.close()
clear()
ptr()
menu()
2020-06-04 14:28:45 -03:00
#------------------------------------------------------
def connected(info): # here we complete the connection to the external node
if info == "Y" or info == "y":
2020-05-13 19:47:58 -03:00
clear()
prt()
print("\nAdd your node information\n")
menuUserConn()
else:
2020-05-13 19:47:58 -03:00
menu()
2020-05-24 14:15:12 -03:00
def nodeinfo():
print("\n\033[1;31;40mWARNING! This is not a safe method of connection. The best method is doing this locally.\n")
connected(input("WARNING! Are you sure you want to connect to a node? Y/n: \033[0;37;40m")) # call 'connected' function to make the connection with the node information
2020-05-24 14:15:12 -03:00
def artist(): # here we convert the result of the command 'getblockcount' on a random art design
custom = input("Do you want random designs? Y/n: ")
if custom == "Y" or custom == "y":
while True:
try:
clear()
close()
design()
tmp()
except (KeyboardInterrupt, SystemExit):
menu()
raise
else:
while True:
try:
clear()
close()
getblockcount()
tmp()
except (KeyboardInterrupt, SystemExit):
menu()
raise
2020-05-10 21:11:21 -03:00
def design():
bitcoinclient = path['bitcoincli'] + " getblockcount"
2020-05-10 21:11:21 -03:00
block = os.popen(str(bitcoinclient)).read() # 'getblockcount' convert to string
2020-05-24 14:15:12 -03:00
b = block
print("\033[1;32;40m")
tprint(b, font="rnd-large")
print("\033[0;37;40m")
#--------------------------------- Hex Block Decoder Functions -------------------------------------
def getrawtx(): # show confirmatins from transactions
tx = input("Insert your TxID: ")
while True:
try:
clear()
prt()
close()
bitcoincli = " getrawtransaction "
2020-05-27 17:34:26 -03:00
if tx == "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b":
print("""\t\t\n\033[1;35;40mThis transaction it's the first one of the Bitcoin Blockchain on Block 0 by Satoshi Nakamoto.
You can decode that block in HEX and see what's inside.\033[0;37;40m""")
t.sleep(10)
else:
lsd = os.popen(path['bitcoincli'] + bitcoincli + tx + " 1")
2020-05-27 17:34:26 -03:00
lsd0 = lsd.read()
lsd1 = str(lsd0)
lsda = lsd1.split(',')
lsdb = lsda[-3]
2020-06-10 19:02:49 -03:00
lsdc = str(lsdb)
print("\033[0;37;40mTransaction " + "\033[1;31;40m{}\033[0;37;40m".format(tx) + " has:\n" + "\033[1;31;40m{}\033[0;37;40m".format(lsdc))
2020-05-27 17:34:26 -03:00
tmp()
lsd.close()
except (KeyboardInterrupt, SystemExit):
menu()
#--------------------------------- End Hex Block Decoder Functions -------------------------------------
2020-05-24 14:15:12 -03:00
#--------------------------------- Menu section -----------------------------------
def menu(): #Main Menu
2020-05-13 19:47:58 -03:00
clear()
prt()
sysinfo()
2020-05-13 19:47:58 -03:00
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
Local Node
2020-06-19 17:51:28 -03:00
Version 0.5.0
\033[1;31;40mA.\033[0;37;40m Run PyBLOCK
\033[1;32;40mB.\033[0;37;40m Show Blockchain information
\033[1;32;40mC.\033[0;37;40m Show the Genesis Block
\033[1;32;40mD.\033[0;37;40m Decode in HEX any block
\033[1;32;40mE.\033[0;37;40m Decode in HEX any transaction
\033[1;32;40mF.\033[0;37;40m Show confirmations from a transaction
\033[1;32;40mH.\033[0;37;40m Advanced
2020-05-29 11:52:29 -03:00
\033[1;33;40mL.\033[0;37;40m Lightning Network
\033[1;34;40mS.\033[0;37;40m SatNode
2020-06-19 17:51:28 -03:00
\033[3;33;40mP.\033[0;37;40m Premium
\033[1;35;40mX.\033[0;37;40m Donate
\033[1;33;40mQ.\033[0;37;40m Exit
2020-05-13 19:47:58 -03:00
\n\n""")
menuA(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
def menuUserConn(): #Menu before connection over ssh
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
Remote Node RPC
2020-06-19 17:51:28 -03:00
Version 0.5.0
\033[1;31;40mA.\033[0;37;40m Run PyBLOCK
\033[1;32;40mB.\033[0;37;40m Show Blockchain information
\033[1;33;40mL.\033[0;37;40m Lightning Network
\033[1;32;40mH.\033[0;37;40m Advanced
\033[1;34;40mS.\033[0;37;40m SatNode
2020-06-19 17:51:28 -03:00
\033[3;33;40mP.\033[0;37;40m Premium
\033[1;35;40mX.\033[0;37;40m Donate
\033[1;33;40mQ.\033[0;37;40m Exit
\n\n""")
menuRemote(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
def advanceMenu(): # Advanced Menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m Bitconi-cli Console
\033[1;32;40mB.\033[0;37;40m FunB
\033[1;32;40mC.\033[0;37;40m Show QR from a Bitcoin Address
\033[1;32;40mS.\033[0;37;40m Sysinfo
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuB(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-06-11 18:46:16 -03:00
def remoteadvanceMenu(): # Advanced Menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-06-11 18:46:16 -03:00
\033[1;32;40mA.\033[0;37;40m Bitconi-cli Console
\033[1;32;40mB.\033[0;37;40m FunB
\033[1;32;40mC.\033[0;37;40m Show QR from a Bitcoin Address
\033[1;32;40mS.\033[0;37;40m Sysinfo
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuBA(input("\033[1;32;40mSelect option: \033[0;37;40m"))
def dnt(): # Donation selection menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-05-24 14:15:12 -03:00
\033[1;32;40mA.\033[0;37;40m Developers Donation
\033[1;32;40mB.\033[0;37;40m Testers Donation
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuC(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
def dntDev(): # Dev Donation Menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-05-24 14:15:12 -03:00
\033[1;32;40mA.\033[0;37;40m PayNym
\033[1;32;40mB.\033[0;37;40m Bitcoin Address
\033[1;32;40mC.\033[0;37;40m Lightning Network
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuE(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
def dntTst(): # Tester Donation Menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-05-24 14:15:12 -03:00
\033[1;32;40mA.\033[0;37;40m Bitcoin Address
\033[1;32;40mB.\033[0;37;40m Lightning Network
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuF(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
def satnodeMenu(): # Satnode Menu
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Menu
2020-06-10 20:28:39 -03:00
Version 0.4.0
\033[1;32;40mA.\033[0;37;40m Start SatNode
\033[1;32;40mB.\033[0;37;40m Feed
\033[1;32;40mC.\033[0;37;40m Setup
\033[1;34;40mS.\033[0;37;40m Send a Message to Space
\033[1;36;40mD.\033[0;37;40m Return Main Menu
\n\n""")
menuD(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-29 11:52:29 -03:00
def menuLND():
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Lightning Network Menu
Remote node connection
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-05-29 11:52:29 -03:00
\033[1;32;40mI.\033[0;37;40m New Invoice
2020-05-29 11:52:29 -03:00
\033[1;31;40mP.\033[0;37;40m Pay Invoice
2020-06-04 14:28:45 -03:00
\033[1;32;40mQ.\033[0;37;40m Channel Balance
\033[1;31;40mL.\033[0;37;40m List Invoices
\033[1;32;40mC.\033[0;37;40m Show Channels
\033[1;33;40mB.\033[0;37;40m New Bitcoin Address
\033[1;33;40mX.\033[0;37;40m List Onchain Transactions
2020-06-04 14:28:45 -03:00
\033[1;32;40mN.\033[0;37;40m Get Node Info
\033[1;32;40mO.\033[0;37;40m Onchain Balance
2020-05-29 11:52:29 -03:00
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuLN(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-05-24 14:15:12 -03:00
2020-06-10 19:02:49 -03:00
def menuLNDLOCAL():
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m Lightning Network Menu
Local node connection
2020-06-19 17:51:28 -03:00
Version 0.5.0
2020-06-10 19:02:49 -03:00
\033[1;32;40mI.\033[0;37;40m New Invoice
\033[1;31;40mP.\033[0;37;40m Pay Invoice
2020-06-10 20:28:39 -03:00
\033[1;32;40mK.\033[0;37;40m Make a KeySend Payment
\033[1;31;40mL.\033[0;37;40m List Invoices
2020-06-10 19:02:49 -03:00
\033[1;32;40mQ.\033[0;37;40m Channel Balance
2020-06-10 20:28:39 -03:00
\033[1;32;40mC.\033[0;37;40m Show Channels
2020-06-10 19:02:49 -03:00
\033[1;32;40mN.\033[0;37;40m Get Node Info
\033[1;32;40mW.\033[0;37;40m Get Network Information
2020-06-19 17:51:28 -03:00
\033[1;32;40mJ.\033[0;37;40m Lncli Console
2020-06-10 20:28:39 -03:00
\033[1;33;40mB.\033[0;37;40m New Bitcoin Address
\033[1;33;40mX.\033[0;37;40m List Onchain Transactions
\033[1;32;40mO.\033[0;37;40m Onchain Balance
2020-06-10 19:02:49 -03:00
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuLNlocal(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-06-19 17:51:28 -03:00
def APIMenu():
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m API \033[1;34;40mPremium\033[0;37;40m Menu
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m TippinMe FREE
\033[1;32;40mB.\033[0;37;40m LNBits \033[3;35;40m{lnbitspaid}\033[0;37;40m
\033[1;32;40mC.\033[0;37;40m LNPay \033[3;35;40m{lnpaypaid}\033[0;37;40m
\033[1;32;40mD.\033[0;37;40m OpenNode \033[3;35;40m{opennodepaid}\033[0;37;40m
2020-06-19 17:51:28 -03:00
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""".format(lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM", lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM", opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"))
2020-06-19 17:51:28 -03:00
menuPI(input("\033[1;32;40mSelect option: \033[0;37;40m"))
def APILnbit():
bitLN = {"NN":"","pd":""}
if os.path.isfile('lnbitSN.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("lnbitSN.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
2020-06-19 17:51:28 -03:00
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m LNBits SN:{} \033[1;34;40mPremium\033[0;37;40m Menu
2020-06-19 17:51:28 -03:00
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m New Invoice
\033[1;32;40mB.\033[0;37;40m Pay Invoice
\033[1;32;40mC.\033[0;37;40m New PayWall
\033[1;32;40mD.\033[0;37;40m Delete PayWall
\033[1;32;40mE.\033[0;37;40m List PayWalls
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""".format(bitLN['NN']))
2020-06-19 17:51:28 -03:00
menuLNBPI(input("\033[1;32;40mSelect option: \033[0;37;40m"))
2020-06-22 14:26:07 -03:00
def APILnPay():
bitLN = {"NN":"","pd":""}
if os.path.isfile('lnpaySN.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("lnpaySN.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
2020-06-22 14:26:07 -03:00
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m LNPay SN:{} \033[1;34;40mPremium\033[0;37;40m Menu
2020-06-22 14:26:07 -03:00
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m New Invoice
\033[1;32;40mB.\033[0;37;40m Pay Invoice
\033[1;32;40mC.\033[0;37;40m Wallet Balance
\033[1;32;40mD.\033[0;37;40m List Invoices
\033[1;32;40mE.\033[0;37;40m Transfer Between Wallets
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""".format(bitLN['NN']))
2020-06-22 14:26:07 -03:00
menuLNPAY(input("\033[1;32;40mSelect option: \033[0;37;40m"))
def APIOpenNode():
bitLN = {"NN":"","pd":""}
if os.path.isfile('opennodeSN.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("opennodeSN.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
2020-06-22 14:26:07 -03:00
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m OpenNode SN:{} \033[1;34;40mPremium\033[0;37;40m Menu
2020-06-22 14:26:07 -03:00
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m New Invoice
\033[1;32;40mB.\033[0;37;40m Pay Invoice
\033[1;32;40mC.\033[0;37;40m Wallet Balance
\033[1;32;40mD.\033[0;37;40m List Payments
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""".format(bitLN['NN']))
2020-06-22 14:26:07 -03:00
menuOpenNode(input("\033[1;32;40mSelect option: \033[0;37;40m"))
def APITippinMe():
clear()
prt()
sysinfo()
print("""\t\t
\033[1;31;40mPyBLOCK\033[0;37;40m TippinMe \033[1;34;40mFree\033[0;37;40m Menu
Version 0.5.0
\033[1;32;40mA.\033[0;37;40m New Invoice
\033[1;36;40mR.\033[0;37;40m Return Main Menu
\n\n""")
menuTippinMe(input("\033[1;32;40mSelect option: \033[0;37;40m"))
def menuSelection():
path = {"ip_port":"", "rpcuser":"", "rpcpass":"", "bitcoincli":""}
pathv = pickle.load(open("bclock.conf", "rb")) # Load the file 'bclock.conf'
path = pathv # Copy the variable pathv to 'path'
if path['bitcoincli']:
menu()
else:
menuUserConn()
def menuSelectionLN():
2020-06-10 19:02:49 -03:00
lndconnectload = {"ip_port":"", "tls":"", "macaroon":"", "lncli":""}
lndconnectData = pickle.load(open("blndconnect.conf", "rb")) # Load the file 'bclock.conf'
lndconnectload = lndconnectData # Copy the variable pathv to 'path'
if lndconnectload['ln']:
2020-06-10 19:02:49 -03:00
menuLNDLOCAL()
else:
menuLND()
2020-06-19 17:51:28 -03:00
def aaccPPiLNBits():
bitLN = {"NN":"","pd":""}
if os.path.isfile('lnbitSN.conf'):
bitData= pickle.load(open("lnbitSN.conf", "rb"))
bitLN = bitData
2020-06-19 17:51:28 -03:00
APILnbit()
else:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
2020-06-22 22:27:37 -03:00
bitLN['NN'] = randrange(10000000)
curl = 'curl -X POST https://lnbits.com/api/v1/payments -d ' + "'{" + """"out": false, "amount": 100000, "memo": "LNBits on PyBLOCK {}" """.format(bitLN['NN']) + "}'" + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94 " -H "Content-type: application/json" """
2020-06-19 17:51:28 -03:00
sh = os.popen(curl).read()
n = str(sh)
d = json.loads(n)
q = d['payment_request']
c = q.lower()
while True:
2020-06-22 14:26:07 -03:00
print("\033[1;30;47m")
qr.add_data(c)
qr.print_ascii()
print("\033[0;37;40m")
qr.clear()
print("Lightning Invoice: " + c)
dn = str(d['checking_id'])
t.sleep(10)
2020-06-19 17:51:28 -03:00
checkcurl = 'curl -X GET https://lnbits.com/api/v1/payments/' + dn + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94" -H "Content-type: application/json" """
rsh = os.popen(checkcurl).read()
clear()
blogo()
nn = str(rsh)
dd = json.loads(nn)
db = dd['paid']
if db == True:
clear()
blogo()
tick()
bitLN['pd'] = "PAID"
pickle.dump(bitLN, open("lnbitSN.conf", "wb"))
createFileConnLNBits()
break
else:
continue
2020-06-22 14:26:07 -03:00
def aaccPPiLNPay():
bitLN = {"NN":"","pd":""}
if os.path.isfile('lnpaySN.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("lnpaySN.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
APILnPay()
else:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
2020-06-22 22:27:37 -03:00
bitLN['NN'] = randrange(10000000)
curl = 'curl -X POST https://lnbits.com/api/v1/payments -d ' + "'{" + """"out": false, "amount": 100000, "memo": "LNPay on PyBLOCK {}" """.format(bitLN['NN']) + "}'" + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94 " -H "Content-type: application/json" """
2020-06-22 14:26:07 -03:00
sh = os.popen(curl).read()
n = str(sh)
d = json.loads(n)
q = d['payment_request']
c = q.lower()
while True:
print("\033[1;30;47m")
qr.add_data(c)
qr.print_ascii()
print("\033[0;37;40m")
qr.clear()
print("Lightning Invoice: " + c)
dn = str(d['checking_id'])
t.sleep(10)
checkcurl = 'curl -X GET https://lnbits.com/api/v1/payments/' + dn + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94" -H "Content-type: application/json" """
rsh = os.popen(checkcurl).read()
clear()
blogo()
nn = str(rsh)
dd = json.loads(nn)
db = dd['paid']
if db == True:
clear()
blogo()
tick()
bitLN['pd'] = "PAID"
pickle.dump(bitLN, open("lnpaySN.conf", "wb"))
createFileConnLNPay()
break
else:
continue
def aaccPPiOpenNode():
bitLN = {"NN":"","pd":""}
if os.path.isfile('opennodeSN.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("opennodeSN.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
APIOpenNode()
else:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
2020-06-22 22:27:37 -03:00
bitLN['NN'] = randrange(10000000)
curl = 'curl -X POST https://lnbits.com/api/v1/payments -d ' + "'{" + """"out": false, "amount": 100000, "memo": "OpenNode on PyBLOCK {}" """.format(bitLN['NN']) + "}'" + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94 " -H "Content-type: application/json" """
2020-06-22 14:26:07 -03:00
sh = os.popen(curl).read()
n = str(sh)
d = json.loads(n)
q = d['payment_request']
c = q.lower()
while True:
print("\033[1;30;47m")
qr.add_data(c)
qr.print_ascii()
print("\033[0;37;40m")
qr.clear()
print("Lightning Invoice: " + c)
dn = str(d['checking_id'])
t.sleep(10)
checkcurl = 'curl -X GET https://lnbits.com/api/v1/payments/' + dn + """ -H "X-Api-Key: 1d646820055e4e2da218e801eaacfc94" -H "Content-type: application/json" """
rsh = os.popen(checkcurl).read()
clear()
blogo()
nn = str(rsh)
dd = json.loads(nn)
db = dd['paid']
if db == True:
clear()
blogo()
tick()
bitLN['pd'] = "PAID"
pickle.dump(bitLN, open("opennodeSN.conf", "wb"))
createFileConnOpenNode()
break
else:
continue
def aaccPPiTippinMe():
bitLN = {"NN":"","pd":""}
if os.path.isfile('tippinme.conf'): # Check if the file 'bclock.conf' is in the same folder
bitData= pickle.load(open("tippinme.conf", "rb")) # Load the file 'bclock.conf'
bitLN = bitData # Copy the variable pathv to 'path'
APITippinMe()
else:
2020-06-22 22:02:00 -03:00
createFileTippinMe()
2020-06-10 19:02:49 -03:00
#--------------------------------- End Menu section -----------------------------------
#--------------------------------- Main Menu execution --------------------------------
2020-06-19 17:51:28 -03:00
def menuPI(menuWN):
if menuWN == "A" or menuWN == "a":
aaccPPiTippinMe()
2020-06-22 14:26:07 -03:00
if menuWN == "B" or menuWN == "b":
aaccPPiLNBits()
2020-06-22 14:26:07 -03:00
if menuWN == "C" or menuWN == "c":
aaccPPiLNPay()
if menuWN == "D" or menuWN == "d":
2020-06-22 14:26:07 -03:00
aaccPPiOpenNode()
def menuTippinMe(menuTM):
if menuTM == "A" or menuTM == "a":
tippinmeGetInvoice()
if menuTM == "R" or menuTM == "r":
APIMenu()
2020-06-22 14:26:07 -03:00
def menuOpenNode(menuOP):
if menuOP == "A" or menuOP == "a":
clear()
prt()
OpenNodecreatecharge()
if menuOP == "B" or menuOP == "b":
clear()
prt()
OpenNodeiniciatewithdrawal()
if menuOP == "C" or menuOP == "c":
clear()
prt()
OpenNodelistfunds()
if menuOP == "D" or menuOP == "d":
clear()
prt()
OpenNodeListPayments()
if menuOP == "R" or menuOP == "r":
APIMenu()
def menuLNPAY(menuNW):
if menuNW == "A" or menuNW == "a":
clear()
prt()
lnpayCreateInvoice()
if menuNW == "B" or menuNW == "b":
clear()
prt()
lnpayPayInvoice()
if menuNW == "C" or menuNW == "c":
clear()
prt()
lnpayGetBalance()
if menuNW == "D" or menuNW == "d":
clear()
prt()
lnpayGetTransactions()
if menuNW == "E" or menuNW == "e":
clear()
prt()
lnpayTransBWallets()
if menuNW == "R" or menuNW == "r":
APIMenu()
2020-06-19 17:51:28 -03:00
def menuLNBPI(menuLNQ):
if menuLNQ == "A" or menuLNQ == "a":
clear()
prt()
lnbitCreateNewInvoice()
if menuLNQ == "B" or menuLNQ == "b":
clear()
prt()
lnbitPayInvoice()
if menuLNQ == "C" or menuLNQ == "c":
clear()
prt()
lnbitCreatePayWall()
if menuLNQ == "D" or menuLNQ == "d":
clear()
prt()
lnbitDeletePayWall()
if menuLNQ == "E" or menuLNQ == "e":
clear()
prt()
lnbitListPawWall()
if menuLNQ == "R" or menuLNQ == "r":
APIMenu()
def menuA(menuS): #Execution of the Main Menu options
if menuS == "A" or menuS == "a":
artist()
elif menuS == "B" or menuS == "b":
2020-05-13 19:47:58 -03:00
while True:
try:
clear()
close()
getblock()
tmp()
2020-06-13 19:23:52 -03:00
except:
break
menuSelection()
elif menuS == "C" or menuS == "c":
clear()
prt()
getgenesis()
a = input("Do you want to return to the Main Menu? Y/n: ")
if a == "Y" or a == "y":
menuSelection()
else:
b = input("Do you want to exit? Y/n: ")
if b == "Y" or b == "y":
os._exit(0)
apisnd.close()
donation.close()
clone.close()
logos.close()
feed.close()
2020-05-27 11:01:03 -03:00
sysinf.close()
2020-06-01 09:25:57 -03:00
nodeconnection.close()
exit()
else:
menuSelection()
elif menuS == "D" or menuS == "d":
clear()
prt()
readHexBlock()
while True:
r = input("Do you want to continue decoding? Y/n: ")
if r == "Y" or r == "y":
clear()
prt()
readHexBlock()
else:
2020-06-13 19:23:52 -03:00
break
menuSelection()
elif menuS == "E" or menuS == "e":
clear()
prt()
readHexTx()
while True:
r = input("Do you want to continue decoding? Y/n: ")
if r == "Y" or r == "y":
clear()
prt()
sysinfo()
readHexTx()
else:
2020-06-13 19:23:52 -03:00
break
menuSelection()
elif menuS == "F" or menuS == "f":
getrawtx()
elif menuS == "H" or menuS == "h":
advanceMenu()
2020-05-29 11:52:29 -03:00
elif menuS == "L" or menuS == "l":
clear()
prt()
menuSelectionLN()
elif menuS == "Q" or menuS == "q":
os._exit(0)
apisnd.close()
donation.close()
clone.close()
logos.close()
feed.close()
sysinf.close()
nodeconnection.close()
exit()
elif menuS == "S" or menuS == "s":
clear()
prt()
satnodeMenu()
elif menuS == "G" or menuS == "g":
nodeinfo()
2020-06-19 17:51:28 -03:00
elif menuS == "P" or menuS == "p":
APIMenu()
elif menuS == "X" or menuS == "x":
dnt()
elif menuS == "T" or menuS == "t": #Test feature fast access
print("This is a test access. \n")
screensv()
def menuRemote(menuS): #Execution of the Main Menu options
if menuS == "A" or menuS == "a":
while True:
try:
clear()
close()
remotegetblock()
tmp()
2020-06-13 19:23:52 -03:00
except:
break
menuUserConn()
elif menuS == "B" or menuS == "b":
while True:
try:
clear()
close()
remotegetblockcount()
tmp()
2020-06-13 19:23:52 -03:00
except:
break
menuUserConn()
elif menuS == "H" or menuS == "h":
2020-06-11 18:46:16 -03:00
remoteadvanceMenu()
elif menuS == "L" or menuS == "l":
clear()
prt()
menuSelectionLN()
elif menuS == "Q" or menuS == "q":
os._exit(0)
apisnd.close()
donation.close()
clone.close()
logos.close()
feed.close()
2020-05-27 11:01:03 -03:00
sysinf.close()
2020-06-01 09:25:57 -03:00
nodeconnection.close()
exit()
elif menuS == "S" or menuS == "s":
clear()
prt()
satnodeMenu()
2020-06-19 17:51:28 -03:00
elif menuS == "P" or menuS == "p":
APIMenu()
elif menuS == "G" or menuS == "g":
nodeinfo()
elif menuS == "X" or menuS == "x":
dnt()
elif menuS == "T" or menuS == "t": #Test feature fast access
print("This is a test access. \n")
2020-05-29 11:52:29 -03:00
screensv()
2020-06-10 19:02:49 -03:00
#------------------------------------------REMOTE
2020-05-29 11:52:29 -03:00
def menuLN(menuLL):
if menuLL == "I" or menuLL == "i":
2020-05-29 11:52:29 -03:00
clear()
prt()
2020-06-10 19:02:49 -03:00
getnewinvoice()
elif menuLL == "P" or menuLL == "p":
2020-05-29 11:52:29 -03:00
clear()
prt()
payinvoice()
2020-06-04 14:28:45 -03:00
elif menuLL == "Q" or menuLL == "q":
clear()
prt()
2020-06-04 14:28:45 -03:00
channelbalance()
elif menuLL == "L" or menuLL == "l":
clear()
prt()
listinvoice()
elif menuLL == "X" or menuLL == "x":
clear()
prt()
listonchaintxs()
elif menuLL == "C" or menuLL == "c":
clear()
prt()
channels()
2020-06-04 14:28:45 -03:00
elif menuLL == "B" or menuLL == "b":
clear()
prt()
2020-06-04 14:28:45 -03:00
getnewaddress()
elif menuLL == "N" or menuLL == "n":
clear()
prt()
2020-06-10 19:02:49 -03:00
getinfo()
elif menuLL == "O" or menuLL == "o":
clear()
prt()
2020-06-10 19:02:49 -03:00
balanceOC()
2020-05-29 11:52:29 -03:00
elif menuLL == "R" or menuLL == "r":
menuUserConn()
2020-06-10 19:02:49 -03:00
#------------------------------------------END REMOTE
#------------------------------------------LOCAL
def menuLNlocal(menuLL):
if menuLL == "I" or menuLL == "i":
clear()
prt()
localaddinvoice()
elif menuLL == "P" or menuLL == "p":
clear()
prt()
localpayinvoice()
elif menuLL == "Q" or menuLL == "q":
clear()
prt()
localchannelbalance()
2020-06-10 20:28:39 -03:00
elif menuLL == "L" or menuLL == "l":
2020-06-10 19:02:49 -03:00
clear()
prt()
2020-06-10 20:28:39 -03:00
locallistinvoices()
elif menuLL == "X" or menuLL == "x":
2020-06-10 19:02:49 -03:00
clear()
prt()
2020-06-10 20:28:39 -03:00
locallistchaintxns()
elif menuLL == "C" or menuLL == "c":
clear()
prt()
locallistchannels()
elif menuLL == "B" or menuLL == "b":
clear()
prt()
localnewaddress()
2020-06-10 19:02:49 -03:00
elif menuLL == "N" or menuLL == "n":
clear()
prt()
localgetinfo()
elif menuLL == "O" or menuLL == "o":
clear()
prt()
localbalanceOC()
elif menuLL == "W" or menuLL == "w":
clear()
prt()
localgetnetworkinfo()
2020-06-19 17:51:28 -03:00
elif menuLL == "J" or menuLL == "j":
while True:
try:
clear()
prt()
sysinfo()
close()
consoleLN()
t.sleep(5)
except:
break
menu()
2020-06-10 19:02:49 -03:00
elif menuLL == "K" or menuLL == "k":
clear()
prt()
localkeysend()
elif menuLL == "R" or menuLL == "r":
menuSelection()
2020-06-10 19:02:49 -03:00
#------------------------------------------END LOCAL
def menuB(menuR): # Advanced access Menu
if menuR == "A" or menuR == "a":
while True:
try:
clear()
prt()
sysinfo()
close()
console()
t.sleep(5)
2020-06-13 19:23:52 -03:00
except:
break
advanceMenu()
elif menuR == "B" or menuR == "b":
while True:
try:
clear()
prt()
close()
logoA()
tmp()
clear()
prt()
close()
logoB()
tmp()
clear()
prt()
close()
logoC()
tmp()
2020-06-13 19:23:52 -03:00
except:
break
advanceMenu()
elif menuR == "C" or menuR == "c":
while True:
try:
clear()
prt()
sysinfo()
close()
decodeQR()
t.sleep(50)
2020-06-13 19:23:52 -03:00
except:
break
advanceMenu()
elif menuR == "S" or menuR == "s":
while True:
try:
clear()
prt()
close()
sysinfoDetail()
t.sleep(1)
2020-06-13 19:23:52 -03:00
except:
break
advanceMenu()
elif menuR == "R" or menuR == "r":
2020-05-27 16:19:42 -03:00
try:
menuSelection()
2020-06-13 19:23:52 -03:00
except:
2020-05-27 16:19:42 -03:00
os._exit(0)
apisnd.close()
donation.close()
clone.close()
logos.close()
feed.close()
sysinf.close()
exit()
2020-06-11 18:46:16 -03:00
def menuBA(menuR): # Advanced access Menu
if menuR == "A" or menuR == "a":
while True:
try:
clear()
prt()
sysinfo()
close()
remoteconsole()
t.sleep(5)
2020-06-13 19:23:52 -03:00
except:
break
2020-06-11 18:46:16 -03:00
advanceMenu()
elif menuR == "B" or menuR == "b":
while True:
try:
clear()
prt()
close()
logoA()
tmp()
clear()
prt()
close()
logoB()
tmp()
clear()
prt()
close()
logoC()
tmp()
2020-06-13 19:23:52 -03:00
except:
break
2020-06-11 18:46:16 -03:00
advanceMenu()
elif menuR == "C" or menuR == "c":
while True:
try:
clear()
prt()
sysinfo()
close()
decodeQR()
t.sleep(50)
2020-06-13 19:23:52 -03:00
except:
break
2020-06-11 18:46:16 -03:00
advanceMenu()
elif menuR == "S" or menuR == "s":
while True:
try:
clear()
prt()
close()
sysinfoDetail()
t.sleep(1)
2020-06-13 19:23:52 -03:00
except:
break
2020-06-11 18:46:16 -03:00
advanceMenu()
elif menuR == "R" or menuR == "r":
try:
menuSelection()
2020-06-13 19:23:52 -03:00
except:
2020-06-11 18:46:16 -03:00
os._exit(0)
apisnd.close()
donation.close()
clone.close()
logos.close()
feed.close()
sysinf.close()
exit()
2020-06-10 19:02:49 -03:00
def menuC(menuO): # Donation access Menu
2020-05-24 14:15:12 -03:00
if menuO == "A" or menuO == "a":
dntDev()
elif menuO == "B" or menuO == "b":
dntTst()
elif menuO == "R" or menuO == "r":
menuSelection()
2020-05-24 14:15:12 -03:00
def menuD(menuN): # Satnode access Menu
if menuN == "A" or menuN == "a":
satnode()
elif menuN == "B" or menuN == "b":
readFile()
elif menuN == "S" or menuN == "s":
try:
close()
message = input("\n\033[0;37;40mYour message it's a \033[1;34;40mF\033[0;37;40mile or a plain \033[1;32;40mT\033[0;37;40mext? \033[1;34;40mF\033[0;37;40m/\033[1;32;40mT\033[0;37;40m: ")
if message == "F" or message == "f":
try:
clear()
prt()
close()
apisenderFile()
2020-05-26 20:48:23 -03:00
t.sleep(30)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
2020-06-10 19:02:49 -03:00
elif message == "T" or message == "t":
try:
clear()
prt()
close()
apisender()
2020-05-26 20:48:23 -03:00
t.sleep(30)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuN == "C" or menuN == "c":
print("\n\t This only will work on Linux or Unix systems.\n")
a = input("Do we continue? Y/n: ")
if a == "Y" or a == "y":
gitclone()
else:
menuSelection()
elif menuN == "D" or menuN == "d":
menuSelection()
2020-05-24 14:15:12 -03:00
def menuE(menuQ): # Dev Donation access Menu
2020-05-24 14:15:12 -03:00
if menuQ == "A" or menuQ == "a":
try:
clear()
prt()
close()
donationPN()
t.sleep(50)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuQ == "B" or menuQ == "b":
try:
clear()
prt()
close()
donationAddr()
t.sleep(50)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuQ == "C" or menuQ == "c":
try:
clear()
prt()
close()
donationLN()
t.sleep(50)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuQ == "R" or menuQ == "r":
menuSelection()
2020-05-24 14:15:12 -03:00
def menuF(menuV): # Tester Donation access Menu
if menuV == "A" or menuV == "a":
try:
clear()
prt()
close()
donationAddrTst()
t.sleep(50)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuV == "B" or menuV == "b":
try:
clear()
prt()
close()
donationLNTst()
t.sleep(50)
menuSelection()
2020-06-13 19:23:52 -03:00
except:
menuSelection()
elif menuV == "R" or menuV == "r":
menuSelection()
#--------------------------------- End Main Menu execution --------------------------------
2020-05-24 14:15:12 -03:00
2020-06-02 22:59:20 -03:00
while True: # Loop
clear()
path = {"ip_port":"", "rpcuser":"", "rpcpass":"", "bitcoincli":""}
2020-05-29 11:52:29 -03:00
if os.path.isfile('bclock.conf') or os.path.isfile('blnclock.conf'): # Check if the file 'bclock.conf' is in the same folder
pathv = pickle.load(open("bclock.conf", "rb")) # Load the file 'bclock.conf'
path = pathv # Copy the variable pathv to 'path'
menuSelection()
else:
prt()
print("Welcome to \033[1;31;40mPyBLOCK\033[0;37;40m\n\n")
print("\n\tIf you are going to use your local node leave IP:PORT/USER/PASSWORD in blank.\n")
path['ip_port'] = "http://{}".format(input("Insert IP:PORT to access your remote Bitcoin-Cli node: "))
path['rpcuser'] = input("RPC User: ")
path['rpcpass'] = input("RPC Password: ")
print("\n\tLocal Bitcoin Core Node connection.\n")
path['bitcoincli']= input("Insert the Path to Bitcoin-Cli: ")
2020-06-10 19:02:49 -03:00
pickle.dump(path, open("bclock.conf", "wb"))
menuSelection()