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 25 Python
Python星号*与**用法分析
Feb 02 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
Aug 31 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
如何使用python操作vmware
Jul 27 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
python将音频进行变速的操作方法
Apr 08 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
Python中可变和不可变对象的深入讲解
Aug 02 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 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学习笔记之二 php入门知识
2011/01/12 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
django跳转页面传参的实现
2020/09/17 Python
几款好用的python工具库(小结)
2020/10/20 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
诚信考试承诺书
2014/03/27 职场文书
学校清明节活动总结
2014/07/04 职场文书
大学生个人求职信例文
2014/07/07 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2015年母亲节寄语
2015/03/23 职场文书
人事聘任通知
2015/04/21 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery