本篇文章给大家分享的是有关使用python怎么实现交易记录链,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
import hashlib
import datetime
# 交易记录类
class DaDaMessage:
def __init__(self, data):
self.hash = None # 自身hash
self.preHash = None # 上一个区块hash
self.data = data # 交易信息
self.timestamp = datetime.datetime.now() # 交易时间
self.payloadHash = self.payload_hash() # 交易后的哈希,防止篡改
#对交易信息进行hash
def payload_hash(self):
sha = hashlib.md5()
datastr = (str(self.data) + str(self.timestamp)).encode("utf-8")
sha.update(datastr)
return sha.hexdigest()
#密封,锁定交易信息
def seal(self):
self.hash = self.hash_message()
#将交易信息和上一个区块密封
def hash_message(self):
sha = hashlib.md5()
datastr = (str(self.preHash) + str(self.payloadHash)).encode("utf-8")
sha.update(datastr)
return sha.hexdigest()
#校验区块信息
def validate(self):
if self.hash != self.hash_message():
raise InvalidateMessage("交易哈希鏈接唄修改")
if self.payloadHash != self.payload_hash():
raise InvalidateMessage("交易時間與數據被修改")
#鏈接區塊
def link(self,Message):
self.preHash = Message.hash
def __repr__(self):
return "hash:{},preHash:{},data:{}".format(self.hash,self.preHash,self.data)
自定义异常类:
class InvalidateMessage(Exception):
def __init__(self,*args,**kwargs):
super(Exception,self).__init__(*args,**kwargs)
编写测试模块:
if __name__=="__main__":
m1 = DaDaMessage("I love coins 12")
m2 = DaDaMessage("I love coins 13")
m3 = DaDaMessage("I love coins 14")
try:
m1.seal()
m2.link(m1)
m2.seal()
m3.link(m2)
m3.seal()
m1.hash = "0xaaaajjjjj"
m1.data = "I don't love "
m1.validate()
m2.validate()
m3.validate()
print(m1)
print(m2)
print(m3)
except InvalidateMessage as e:
print(e)
查看打印结果:
跟上面的逻辑完美契合,然后我们在测试下篡改数据的结果:
以上就是使用python怎么实现交易记录链,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。