我正在使用 Python 开发工作量证明系统。
为了生成哈希值,我正在使用这个函数
from Cryptodome.Hash import SHA256
def blockhash(sender, msg, signature, nonce, timestamp):
h = SHA256.new()
hash_str = str(sender) + str(msg) + str(signature) + str(nonce) + str(timestamp)
h.update(hash_str.encode())
finalhash = h.hexdigest()
return finalhash
当我生成一个“交易”时,它会做工作证明,同时将它加一,看看哈希是否以 4 个零开头。
while finalhash[:4] != "0000":
finalhash = blockhash(self.sender, self.msg, self.signature, self.nonce, self.timestamp)
self.nonce += 1
print(str(self.nonce))
print(finalhash)
如果事务以两个零开头,则将此文件放入字典中。该字典被写入一个文本文件。当我想验证此交易并查看这些值是否与哈希值真正匹配时,即使使用相同的数据,我也总是得到错误的哈希值。
finalhash = blockhash(t["sender"], t["msg"], t["signature"], t["nonce"], t["timestamp"])
编辑:
输入值都被转换为字符串。sender、msg 和 signature 是字节,其中 nonce 是整数,timestamp 是浮点数。