我正在尝试使用python创建自己的区块链。
我拿了这个源代码,我正在尝试调整它以适应我需要的东西。 我的代码:
import datetime
import hashlib
class Block:
def __init__(
self,
previous_block_hash,
data,
timestamp,
sender,
):
self.previous_block_hash = previous_block_hash
self.data = data
self.timestamp = timestamp
self.hash = self.get_hash()
self.sender = self.get_sender()
@staticmethod
def create_genesis_block():
return Block('0', '0', datetime.datetime.now(), '')
def get_sender(self):
self.sender = input('Enter senders ID number: ')
return self.sender
def get_hash(self):
header_bin = str(self.previous_block_hash) + str(self.data)
+ str(self.timestamp) + str(self.sender)
inner_hash =
hashlib.sha256(header_bin.encode()).hexdigest().encode()
outer_hash = hashlib.sha256(inner_hash).hexdigest()
return outer_hash
blockchain = [Block.create_genesis_block()]
length_of_blockchain = len(blockchain)
print ('The genesis block has been created.')
print ('Hash: %s' % blockchain[0].hash)
blockchain.append(Block(blockchain[length_of_blockchain - 1].hash,
'Blockchain Number: '[length_of_blockchain - 1],
datetime.datetime.now(), Block.get_sender()))
我想将发送方和接收方添加到块中。所以,我首先从一个开始,那就是发件人。我在这里不断收到此错误,但不确定如何解决它。一切都在本地进行测试,以确保所有内容都检查出来,然后我将添加本机反应。希望有人能帮助我
您正在尝试在初始化之前访问self.sender
。重新排序初始化可能会对我们有所帮助。
import datetime
import hashlib
class Block:
def __init__(
self,
previous_block_hash,
data,
timestamp,
sender,
):
self.previous_block_hash = previous_block_hash
self.data = data
self.timestamp = timestamp
#reordering self.hash and self.sender as self.get_sender() references to self.sender
self.sender = self.get_sender()
self.hash = self.get_hash()
@staticmethod
def create_genesis_block():
return Block('0', '0', datetime.datetime.now(), '')
def get_sender(self):
self.sender = input('Enter senders ID number: ')
return self.sender
def get_hash(self):
header_bin = str(self.previous_block_hash) + str(self.data)
+ str(self.timestamp) + str(self.sender)
inner_hash =
hashlib.sha256(header_bin.encode()).hexdigest().encode()
outer_hash = hashlib.sha256(inner_hash).hexdigest()
return outer_hash
希望这有帮助