finished basics of mining, added explore blocks
This commit is contained in:
parent
c0155f94fe
commit
358de4ea6a
@ -1,6 +1,11 @@
|
|||||||
from classes.Transaction import Tx
|
from classes.Transaction import Tx
|
||||||
|
from classes.TxBlock import TxBlock
|
||||||
from helpers import SignatureHelper as signatureHelper
|
from helpers import SignatureHelper as signatureHelper
|
||||||
from helpers import UtilityHelper as utilityHelper
|
from helpers import UtilityHelper as utilityHelper
|
||||||
|
import time
|
||||||
|
|
||||||
|
MIN_MINING_TIME = 0
|
||||||
|
MAX_MINING_TIME = 20
|
||||||
|
|
||||||
def transaction(self):
|
def transaction(self):
|
||||||
receiver = input("Enter the username of the receiver:")
|
receiver = input("Enter the username of the receiver:")
|
||||||
@ -73,8 +78,110 @@ def createBlock(self):
|
|||||||
if int(i) not in available_transactions:
|
if int(i) not in available_transactions:
|
||||||
print("Wrong input, try again")
|
print("Wrong input, try again")
|
||||||
return False
|
return False
|
||||||
fees_list.append(int(i))
|
selected_transactions.append(int(i))
|
||||||
|
|
||||||
|
if len(selected_transactions) > 10 and len(selected_transactions) < 5:
|
||||||
|
print("You can only select up to 10 transactions")
|
||||||
|
return False
|
||||||
|
# add last block if its available
|
||||||
|
block = TxBlock(None)
|
||||||
|
|
||||||
|
# create block
|
||||||
|
for i in selected_transactions:
|
||||||
|
block.addTx(transactions[i])
|
||||||
|
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
nonce = block.find_nonce()
|
||||||
|
elapsed = time.time() - start
|
||||||
|
|
||||||
|
if not block.good_nonce():
|
||||||
|
print("ERROR! Bad nonce")
|
||||||
|
return False
|
||||||
|
|
||||||
|
print("Success! Nonce is good!")
|
||||||
|
print(f'Accepted Nonce = {str(nonce)}')
|
||||||
|
|
||||||
|
print("elapsed time: " + str(elapsed) + " s.")
|
||||||
|
if elapsed < MIN_MINING_TIME:
|
||||||
|
print("Mining declined, too fast")
|
||||||
|
return False
|
||||||
|
elif elapsed > MAX_MINING_TIME:
|
||||||
|
print("Mining declined, too Slow")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# add block to blockchain
|
||||||
|
block.time = elapsed
|
||||||
|
block.nonce = nonce
|
||||||
|
# TODO ADD DATE
|
||||||
|
block.date = None
|
||||||
|
utilityHelper.saveFile("../data/ledger.dat", block)
|
||||||
|
# TODO remove transactions from transaction pool
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def exploreBlocks(self):
|
||||||
|
blocks = utilityHelper.loadFile("../data/ledger.dat")
|
||||||
|
x = 0
|
||||||
|
for block in blocks:
|
||||||
|
print(f"---------------------------------------{x}-------------------------------------------")
|
||||||
|
print(f"Block created: {block.date}")
|
||||||
|
x += 1
|
||||||
|
print("---------------------------------------END-------------------------------------------")
|
||||||
|
print("Select a number to view the block, keep empty to return.")
|
||||||
|
user_input = input(">>: ")
|
||||||
|
if user_input == "":
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
user_input = int(user_input)
|
||||||
|
except:
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
print("Wrong input, try again")
|
||||||
|
return
|
||||||
|
|
||||||
|
if user_input > len(blocks):
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
print("Wrong input, try again")
|
||||||
|
return
|
||||||
|
|
||||||
|
# print all info of the block
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
print(f"---------------------------------------{user_input}-------------------------------------------")
|
||||||
|
print(f"Block created: {blocks[user_input].date}")
|
||||||
|
print(f"Block hash: {blocks[user_input].blockHash}")
|
||||||
|
print(f"Block nonce: {blocks[user_input].nonce}")
|
||||||
|
print(f"Block mined time: {blocks[user_input].time}")
|
||||||
|
# print(f"Block transactions: {blocks[user_input].transactions}")
|
||||||
|
print(f"Block previous hash: {blocks[user_input].previousHash}")
|
||||||
|
print("---------------------------------------------------------------------------------------")
|
||||||
|
print("0 -- go back")
|
||||||
|
print("1 -- View transactions of current block")
|
||||||
|
print("2 -- View another block")
|
||||||
|
choice = input(">>: ")
|
||||||
|
|
||||||
|
match choice:
|
||||||
|
case "0":
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
return
|
||||||
|
case "1":
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
x = 0
|
||||||
|
for transaction in blocks[user_input].data:
|
||||||
|
print(f"---------------------------------------{x}-------------------------------------------")
|
||||||
|
print(f"Transaction input: {transaction.inputs[0][1]}")
|
||||||
|
print(f"Transaction output: {transaction.outputs[0][1]}")
|
||||||
|
print(f"Transaction fees: {transaction.inputs[0][1] - transaction.outputs[0][1]}")
|
||||||
|
print(f"Transaction sender: \n{transaction.inputs[0][0]}")
|
||||||
|
print(f"Transaction recipient: \n{transaction.outputs[0][0]}")
|
||||||
|
x += 1
|
||||||
|
print("-----------------------------------------------------------------------------------")
|
||||||
|
case "2":
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
exploreBlocks(self)
|
||||||
|
case _:
|
||||||
|
utilityHelper.clearScreen()
|
||||||
|
print("Wrong input, try again")
|
||||||
|
return
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user