快速问题在我的代码中,我从第14-21行生成了一个关键错误。当我试图在事务字典中插入输入函数时,我收到一个键错误。我的问题是,如何将这些值插入我的字典以创建区块链?我的目标是引入一个while循环,将块放在区块链上。对于每个块的数据元素,我必须制作一个包含以下键\值的字典:发送方、接收方、货币\金额。在我从用户输入中收集这些值之后。我的while循环应该一直请求值,直到它被告知停止。一旦我收集了我所有的价值观,我必须验证区块链以确保它是好的
import hashlib
import json
from time import time
class Block():
def __init__(self, nonce, tstamp, transaction, prevhash=''):
self.nonce = nonce
self.tstamp = time()
self.transaction = {}
self.prevhash = prevhash
self.hash = self.calhash()
self.chain = []
while True:
self.sender = input("Sender:\n")
self.transaction[self.sender]
self.reciever = input("Receiver\n")
self.transaction[self.reciever]
self.amount = input("money_amt: \n")
self.transaction[self.amount]
break
def calhash(self):
block_string = json.dumps({"nonce": self.nonce, " tstamp": self.tstamp, " transaction": self.transaction, " prevhash": self.prevhash}, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()
def __str__(self):
string= " nonce:" + " " + str(self.nonce) + "\n"
string += " tstamp:" + " " + str(self.tstamp) + "\n"
string += " transaction:" + " " + str(self.transaction) + "\n"
string += " prevhash:" + " " + str(self.prevhash) + "\n"
string += " hash:" + " " + str(self.hash) + "\n"
return string
def printHashes(self):
print("prevhash", self.prevhash)
print("hash", self.hash)
class Blockchain():
def __init__(self):
self.chain=[self.generateGenesisBlock(),]
def generateGenesisBlock(self):
return Block(0, "" ," ", " ")
def getLastBlock(self):
return self.chain[-1]
def addBlock(self, new_block):
new_block.prevhash=self.getLastBlock().hash
new_block.hash=new_block.calhash()
self.chain.append(new_block)
def isChainValid(self):
for i in range(1, len(self.chain)):
prevb=self.chain[i-1]
currb=self.chain[i]
if(currb.hash != currb.calhash()):
print("invalid block")
return False
if(currb.prevhash != prevb.hash):
print("invalid chain")
return False
return True
BTC = Blockchain()
BTC.addBlock(Block(1, " ", "Sender: Luke Reciepent: James Amount: 220", " "))
for b in BTC.chain:
print(b)
print(BTC.isChainValid())
我对python比较新,但在阅读您的错误时,我想到了一个解决方案,即使用.get()方法返回在指定键处找到的值或默认值。因此,对于您的具体问题:
相关问题 更多 >
编程相关推荐