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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
python中assert用法实例分析
Apr 30 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
python实现Decorator模式实例代码
Feb 09 Python
利用Python如何生成便签图片详解
Jul 09 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
Python 元组操作总结
Sep 18 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 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的图形函数中显示汉字
2006/10/09 PHP
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
PHP chr()函数讲解
2019/02/11 PHP
js验证模型自我实现的具体方法
2013/06/21 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
vue项目中使用百度地图的方法
2018/06/08 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
python正则表达式re模块详细介绍
2014/05/29 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
python如何调用java类
2020/07/05 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
事务机电主管工作职责
2014/02/25 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
创业计划书之酒店
2019/08/30 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Pytorch 如何实现常用正则化
2021/05/27 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python