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


Posted in Python onJuly 03, 2019

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

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("交易哈希?接?h修改")
    if self.payloadHash != self.payload_hash():
      raise InvalidateMessage("交易?r?????恍薷?)
  #?接?^?K
  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 相关文章推荐
使用Python对Access读写操作
Mar 30 Python
python:接口间数据传递与调用方法
Dec 17 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
python实现人工智能Ai抠图功能
Sep 05 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
浅析matlab中imadjust函数
Feb 27 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
基于Python的Jenkins的二次开发操作
May 12 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 #Python
python简单区块链模拟详解
Jul 03 #Python
python使用递归的方式建立二叉树
Jul 03 #Python
python挖矿算力测试程序详解
Jul 03 #Python
如何用Python做一个微信机器人自动拉群
Jul 03 #Python
Python中的正则表达式与JSON数据交换格式
Jul 03 #Python
python实现共轭梯度法
Jul 03 #Python
You might like
坏狼的PHP学习教程之第1天
2008/06/15 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python Flask基础教程示例代码
2018/02/07 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
Python如何获取文件路径/目录
2020/09/22 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
公民代理授权委托书
2014/09/24 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
学生会干部任命书
2015/09/21 职场文书
学前班教学反思
2016/02/24 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技