我有一个函数,它生成一个带有一些数据的块
:
def new_block(self, proof, previous_hash=None):
...
block = {
'message': 'New Block Forged',
'index': len(self.chain) + 1,
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash, or self.hash_block(self.chain[-1]),
'timestamp': response.tx_time or time(),
}
self.chain
是块所在的列表。函数中传入了previous_hash
(前一个块的哈希值),并创建了一个时间戳。不必过于关注实际数据的细节(可能存在问题,但这更与hash()
函数有关,而非数据的操作)。
接下来,我对块进行哈希运算,并将其添加到块中:
block['hash'] = self.hash_block(block)
hash_block
函数如下:
@staticmethod
def hash_block(block):
block_string = json.dumps(block, sort_keys=True)
return hash(block_string)
该函数创建的哈希值与下一个区块所述的哈希值不同(前面的区块的哈希值与前面块的
previous_hash
不匹配)。然而,它们使用相同的函数:这行代码:
'previous_hash': previous_hash or self.hash_block(self.chain[-1])
和这行代码:
block['hash'] = self.hash_block(block)
是重要的行(以及hash_block
函数)。创建一个块,对其进行哈希计算并附加哈希值,然后创建另一个块并对上一个块进行哈希计算,但是当创建该块时,所生成的哈希值与该块的哈希值不匹配。另外,我最初使用了hashlib.sha256,当我注意到这个问题后,我决定看看是否是哈希函数的问题,所以我切换到了
stock
哈希,但我仍然遇到了这个问题 - 最终我想让它在hashlib
上工作,但我认为如果我能先让它在hash
上工作...我就解决了在hashlib
上的问题。