python交易記錄鏈的實現(xiàn)過程詳解
接著上篇的內容,這里實現(xiàn)一個交易記錄鏈,廢話不多說,先看圖:

跟之前的邏輯類似,但也有少許不同,這里多了一個payloadhash,以及對payloadhash和prehash的hash,下面看代碼實現(xiàn):
import hashlib
import datetime
# 交易記錄類
class DaDaMessage:
def __init__(self, data):
self.hash = None # 自身hash
self.preHash = None # 上一個區(qū)塊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()
#將交易信息和上一個區(qū)塊密封
def hash_message(self):
sha = hashlib.md5()
datastr = (str(self.preHash) + str(self.payloadHash)).encode("utf-8")
sha.update(datastr)
return sha.hexdigest()
#校驗區(qū)塊信息
def validate(self):
if self.hash != self.hash_message():
raise InvalidateMessage("交易哈希鏈接唄修改")
if self.payloadHash != self.payload_hash():
raise InvalidateMessage("交易時間與數(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)
編寫測試模塊:
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)
查看打印結果:

跟上面的邏輯完美契合,然后我們在測試下篡改數(shù)據(jù)的結果:

當然,你也可以嘗試不用try…except 看下結果。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python有關Unicode UTF-8 GBK編碼問題詳解
本文主要介紹了Python有關Unicode UTF-8 GBK編碼問題詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08
使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡擬合sin函數(shù)的實現(xiàn)
這篇文章主要介紹了使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡擬合sin函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
解決pycharm安裝scrapy DLL load failed:找不到指定的程序的問題
很多朋友向小編求助pycharm安裝scrapy DLL load failed:找不到指定的程序的問題,就這一問題小編在window10 + anaconda3 +pycharm2020.1.1 + scrapy安裝親測可用,下面把我的處理過程分享到腳本之家平臺,供大家參考2021-06-06
詳解python while 函數(shù)及while和for的區(qū)別
這篇文章主要介紹了python while 函數(shù)及while和for的區(qū)別 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
python+selenium 簡易地疫情信息自動打卡簽到功能的實現(xiàn)代碼
這篇文章主要介紹了python+selenium 簡易地疫情信息自動打卡簽到功能的實現(xiàn)代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

