最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python交易記錄鏈的實(shí)現(xiàn)過程詳解

 更新時間:2019年07月03日 15:13:03   作者:charles_lun  
這篇文章主要介紹了python交易記錄鏈的實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

接著上篇的內(nèi)容,這里實(shí)現(xiàn)一個交易記錄鏈,廢話不多說,先看圖:

跟之前的邏輯類似,但也有少許不同,這里多了一個payloadhash,以及對payloadhash和prehash的hash,下面看代碼實(shí)現(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() # 交易后的哈希,防止篡改

  #對交易信息進(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()
  #將交易信息和上一個區(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ù)據(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)

查看打印結(jié)果:

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

當(dāng)然,你也可以嘗試不用try…except 看下結(jié)果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python可迭代對象去重實(shí)例

    python可迭代對象去重實(shí)例

    這篇文章主要介紹了python可迭代對象去重實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • wxPython事件驅(qū)動實(shí)例詳解

    wxPython事件驅(qū)動實(shí)例詳解

    這篇文章主要介紹了wxPython事件驅(qū)動機(jī)制,以一個獲取當(dāng)前位置信息的實(shí)例形式講述了wxPython事件驅(qū)動機(jī)制及其相關(guān)函數(shù)的用法,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-09-09
  • 使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡(luò)擬合sin函數(shù)的實(shí)現(xiàn)

    使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡(luò)擬合sin函數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了使用 pytorch 創(chuàng)建神經(jīng)網(wǎng)絡(luò)擬合sin函數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python3 對list中每個元素進(jìn)行處理的方法

    python3 對list中每個元素進(jìn)行處理的方法

    今天小編就為大家分享一篇python3 對list中每個元素進(jìn)行處理的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 解決pycharm安裝scrapy DLL load failed:找不到指定的程序的問題

    解決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ū)別

    這篇文章主要介紹了python while 函數(shù)及while和for的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • python+selenium 簡易地疫情信息自動打卡簽到功能的實(shí)現(xiàn)代碼

    python+selenium 簡易地疫情信息自動打卡簽到功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python+selenium 簡易地疫情信息自動打卡簽到功能的實(shí)現(xiàn)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 最新評論

    东台市| 西乡县| 阿拉善左旗| 五河县| 汉源县| 勐海县| 普格县| 云安县| 慈利县| 昂仁县| 武山县| 隆安县| 宁陵县| 东兰县| 茌平县| 黑河市| 霸州市| 浪卡子县| 平武县| 万年县| 黔西| 洪雅县| 高唐县| 桃园县| 平舆县| 南投市| 胶州市| 康保县| 叶城县| 淮北市| 宾川县| 巢湖市| 陆良县| 栾城县| 洪湖市| 萨迦县| 五台县| 姜堰市| 阳新县| 揭东县| 元谋县|