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 30 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
python读取各种文件数据方法解析
Dec 29 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
python获取当前文件路径以及父文件路径的方法
Jul 10 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
Python读取实时数据流示例
Dec 02 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python从PDF中提取数据的示例
Oct 30 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 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
ThinkPHP中的关联模型注意点
2014/06/16 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
详谈javascript精度问题与调整
2017/07/08 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python数组循环处理方法
2019/08/26 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
python3实现绘制二维点图
2019/12/04 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
美国校服网上商店:French Toast
2019/10/08 全球购物
校庆口号
2014/06/20 职场文书
教师暑期培训感言
2014/08/15 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
python区块链实现简版工作量证明
2022/05/25 Python