python交易記錄鏈的實(shí)現(xiàn)過(guò)程詳解
接著上篇的內(nèi)容,這里實(shí)現(xiàn)一個(gè)交易記錄鏈,廢話不多說(shuō),先看圖:
跟之前的邏輯類似,但也有少許不同,這里多了一個(gè)payloadhash,以及對(duì)payloadhash和prehash的hash,下面看代碼實(shí)現(xiàn):
import hashlib import datetime # 交易記錄類 class DaDaMessage: def __init__(self, data): self.hash = None # 自身hash self.preHash = None # 上一個(gè)區(qū)塊hash self.data = data # 交易信息 self.timestamp = datetime.datetime.now() # 交易時(shí)間 self.payloadHash = self.payload_hash() # 交易后的哈希,防止篡改 #對(duì)交易信息進(jìn)行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() #將交易信息和上一個(gè)區(qū)塊密封 def hash_message(self): sha = hashlib.md5() datastr = (str(self.preHash) + str(self.payloadHash)).encode("utf-8") sha.update(datastr) return sha.hexdigest() #校驗(yàn)區(qū)塊信息 def validate(self): if self.hash != self.hash_message(): raise InvalidateMessage("交易哈希鏈接唄修改") if self.payloadHash != self.payload_hash(): raise InvalidateMessage("交易時(shí)間與數(shù)據(jù)被修改") #鏈接區(qū)塊 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)
編寫(xiě)測(cè)試模塊:
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)
查看打印結(jié)果:
跟上面的邏輯完美契合,然后我們?cè)跍y(cè)試下篡改數(shù)據(jù)的結(jié)果:
當(dāng)然,你也可以嘗試不用try…except 看下結(jié)果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python操作excel文件并輸出txt文件的實(shí)例
今天小編就為大家分享一篇python操作excel文件并輸出txt文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu)(推薦)
這篇文章主要介紹了tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Python中的函數(shù)參數(shù)傳遞問(wèn)題
這篇文章主要介紹了Python中的函數(shù)參數(shù)傳遞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Pandas?篩選和刪除目標(biāo)值所在的行的實(shí)現(xiàn)
本文主要介紹了Pandas篩選和刪除目標(biāo)值所在的行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換
這篇文章主要介紹了pandas映射與數(shù)據(jù)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下2021-01-01