def chain_is_authentic(self):
try:
goofy_public_key = ExternalUser.load_goofy_public_key()
signature_to_check = encode_data((self.recipient_public_key, self.previous_hash))
if isinstance(self.previous_block,Coin):
if (goofy_public_key.verify(self.previous_block.signature, str(self.previous_block.coin_id).encode()) and
goofy_public_key.verify(self.signature, json.dumps((str(self.recipient_public_key),str(self.previous_block.coin_id))).encode())):
return True
else:
return False
elif isinstance(self.previous_block, TransactionBlock):
if (self.previous_hash == self.previous_block.hash and
self.spender_public_key == self.previous_block.recipient_public_key):
self.spender_public_key.verify(self.signature, signature_to_check)
return self.previous_block.chain_is_authentic()
else:
print("Transactions " + str(self.hash) + " and " + str(self.previous_block.hash) + " do not match.")
else:
print("Types do not match up in the chain.")
except ecdsa.BadSignatureError:
return False
评论列表
文章目录