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进行二进制文件读写的简单方法(推荐)
Sep 12 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
Python随机函数random()使用方法小结
Apr 29 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
python 返回列表中某个值的索引方法
Nov 07 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Flask-WTF表单的使用方法
Jul 12 Python
pandas的排序和排名的具体使用
Jul 31 Python
tensorflow模型转ncnn的操作方式
May 25 Python
python类共享变量操作
Sep 03 Python
10个示例带你掌握python中的元组
Nov 23 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代码收集表单内容并写入文件的代码
2012/01/29 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
mongodb和php的用法详解
2019/03/25 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
详解JavaScript树结构
2017/01/09 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python中time库的实例使用方法
2019/10/31 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
大学生自我鉴定
2013/12/16 职场文书
产品质量承诺书
2014/03/27 职场文书
转让协议书范本
2014/09/13 职场文书
庆六一宣传标语
2014/10/08 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers