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使用MySQLdb for Python操作数据库教程
Oct 11 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
python 网络编程详解及简单实例
Apr 25 Python
Python选择网卡发包及接收数据包
Apr 04 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python 实现生成均匀分布的点
Dec 05 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
python识别验证码图片实例详解
Feb 17 Python
用Python绘制漫步图实例讲解
Feb 26 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
python如何爬取动态网站
Sep 09 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
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
python 字典(dict)按键和值排序
2016/06/28 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python中np是做什么的
2020/07/21 Python
python如何对链表操作
2020/10/10 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
班主任自我评价范文
2015/03/11 职场文书
护理自荐信
2019/05/14 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS