Я работаю над проектом, в котором я пытаюсь создать очень простую криптовалюту на основе блокчейна. Это упрощенная версия способа, которым я пытаюсь хэшировать блочный объект (очевидно, поля класса Block
намного сложнее, но это основная идея):
from Crypto.Hash import SHA
import json
from collections import OrderedDict
from random import random
class Block(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def to_dict(self):
d = OrderedDict({
'x' : self.x,
'y' : self.y,
'z' : self.z
})
return d
def json(self):
return json.dumps(self.to_dict())
def hash(self):
return SHA.new(self.json().encode('utf8')).hexdigest()
# driver code to test hashing
while True:
x, y, z = [random() for _ in range(3)]
b = Block(x, y, z)
if not bin(int(b.hash(), 16)).startswith('0b1'):
break
Вышеуказанная программа драйвера зацикливается навсегда. Проблема в том, что (независимо от количества и / или значения полей) хеш ВСЕГДА начинается с 0b1
, что мешает всей идее сложности майнинга и проверки работоспособности. Более важно, однако, что это не ожидаемое поведение хеш-функции. Что мне не хватает?