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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
在Python中处理字符串之ljust()方法的使用简介
May 19 Python
python文件与目录操作实例详解
Feb 22 Python
python删除字符串中指定字符的方法
Aug 13 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
Python解析多帧dicom数据详解
Jan 13 Python
python实现串口通信的示例代码
Feb 10 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
超级详细实用的pycharm常用快捷键
May 12 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 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/09/14 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
微信小程序如何获取用户手机号
2018/01/26 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Django web框架使用url path name详解
2019/04/29 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
浅谈python 类方法/静态方法
2020/09/18 Python
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
行政办公员自我评价分享
2013/12/14 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
青年志愿者活动总结
2014/04/26 职场文书
演讲开场白和结束语
2015/05/29 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android