Я работаю над системой Proof-of-Work в 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
Когда я генерирую «транзакцию», она выполняет Proof-of-Work, увеличивая ее на единицу и проверяя, начинается ли хэш с 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"])
EDIT:
Все входные значения преобразуются в строку. sender, msg и signature - байты, где nonce - целое число, а метка времени - число с плавающей запятой.