本篇文章給大家分享的是有關使用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怎么實現交易記錄鏈,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。