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按照多个字符对字符串进行分割的方法
Mar 17 Python
python实现比较两段文本不同之处的方法
May 30 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
django之自定义软删除Model的方法
Aug 14 Python
python数据化运营的重要意义
Nov 25 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
python实现梯度下降法
Mar 24 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
Python Http请求json解析库用法解析
Nov 28 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
CI框架表单验证实例详解
2016/11/21 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Python socket聊天脚本代码实例
2020/01/02 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
责任书范本
2014/08/25 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
检讨书范文500字
2015/01/28 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js