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的collections模块中的deque双端队列结构
Jul 07 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
python3.x实现发送邮件功能
May 22 Python
举例讲解Python常用模块
Mar 08 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
python解析多层json操作示例
Dec 30 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Python使用configparser库读取配置文件
Feb 22 Python
Django如何使用redis作为缓存
May 21 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 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
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
JavaScript中实现块作用域的方法
2010/04/01 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
Python常用库大全及简要说明
2020/01/17 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python 爬虫性能相关总结
2020/08/03 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
HTML5进度条特效
2014/12/18 HTML / CSS
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
学习党章思想汇报
2014/01/07 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
环保标语大全
2014/06/12 职场文书
校本教研活动总结
2014/07/01 职场文书
员工离职感谢信
2015/01/22 职场文书
储备店长岗位职责
2015/04/14 职场文书
个人催款函范文
2015/06/23 职场文书
python基础之while循环语句的使用
2021/04/20 Python