Я посмотрел остальные 4 вопроса здесь, но все еще не могу понять, где поставить .encode()
или .encode('utf-8')
. Я прокомментировал это, чтобы показать различные места, которые я пробовал.
import hashlib as hasher
class Block:
def __init__(self, index, timestamp, data, previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash #these four items used to calculate crypHash of each block
self.hash = self.hash_block() #helps ensure integrity throughout blockchain
def hash_block(self):
sha = hasher.sha256() #.encode('utf-8')
sha.update(str(self.index)+
str(self.timestamp)+
str(self.data)+
str(self.previous_hash)) #.encode() inside brackets
return sha.hexdigest()
Вот трассировка (чтение снизу вверх):
Traceback (most recent call last):
File "blockchain.py", line 7, in <module>
blockchain = [create_genesis_block()]
File "/media/nobu/win10Files/Blockchain/SnakeCoin/genesis.py", line 8, in create_genesis_block
return Block(0, date.datetime.now(), "Genesis Block", "0")
File "/media/nobu/win10Files/Blockchain/SnakeCoin/block.py", line 9, in __init__
self.hash = self.hash_block() #helps ensure integrity throughout blockchain
File "/media/nobu/win10Files/Blockchain/SnakeCoin/block.py", line 16, in hash_block
str(self.previous_hash))
TypeError: Unicode-objects must be encoded before hashing
, который, кажется, указывает на то, что строка str(self.previous_hash)) #.encode() inside brackets
должна быть str(self.previous_hash).encode())
, но это дает мне еще одну ошибку:
Traceback (most recent call last):
File "blockchain.py", line 7, in <module>
blockchain = [create_genesis_block()]
File "/media/nobu/win10Files/Blockchain/SnakeCoin/genesis.py", line 8, in create_genesis_block
return Block(0, date.datetime.now(), "Genesis Block", "0")
File "/media/nobu/win10Files/Blockchain/SnakeCoin/block.py", line 9, in __init__
self.hash = self.hash_block() #helps ensure integrity throughout blockchain
File "/media/nobu/win10Files/Blockchain/SnakeCoin/block.py", line 16, in hash_block
str(self.previous_hash).encode())
TypeError: must be str, not bytes
Итак, я попробовал encode()
и decode()
в различных комбинациях с помощью скобок, но это только заставляет меня чередовать ошибки.
Таким образом, я довольно потерян и был бы признателен за некоторые указания.
Кстати, этот код взят из статьи Medium здесь: Medium Snake Coin