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读取注册表中值的方法
Apr 08 Python
django的登录注册系统的示例代码
May 14 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
python try except 捕获所有异常的实例
Oct 18 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
python实现图像拼接功能
Mar 23 Python
Python实现仿射密码的思路详解
Apr 23 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
Python 多进程、多线程效率对比
Nov 19 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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中的switch语句的用法实例详解
2015/10/21 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
jquery操作select大全
2014/04/25 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
财政专业求职信范文
2014/02/19 职场文书
大三学习计划书范文
2014/05/02 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python