脚本专栏 
首页 > 脚本专栏 > 浏览文章

python交易记录链的实现过程详解

(编辑:jimmy 日期: 2025/9/23 浏览:3 次 )

接着上篇的内容,这里实现一个交易记录链,废话不多说,先看图:

python交易记录链的实现过程详解

跟之前的逻辑类似,但也有少许不同,这里多了一个payloadhash,以及对payloadhash和prehash的hash,下面看代码实现:

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交易记录链的实现过程详解

跟上面的逻辑完美契合,然后我们在测试下篡改数据的结果:

python交易记录链的实现过程详解

当然,你也可以尝试不用try…except 看下结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:Python 中Django安装和使用教程详解
下一篇:利用python求积分的实例
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap