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中的CURL PycURL使用例子
Jun 01 Python
python实现删除文件与目录的方法
Nov 10 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python对常见数据类型的遍历解析
Aug 27 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
Python中的__init__作用是什么
Jun 09 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 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双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python生成器表达式和列表解析
2016/03/10 Python
python绘制简单折线图代码示例
2017/12/19 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python数据归一化及三种方法详解
2019/08/06 Python
深入学习python多线程与GIL
2019/08/26 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
美国网上订购鲜花:FTD
2016/09/23 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
jQuery treeview树形结构应用
2021/03/24 jQuery
教师自我鉴定范文
2014/03/20 职场文书
销售会议开幕词
2015/01/28 职场文书
创业计划书之书店
2019/09/10 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
anaconda python3.8安装后降级
2021/06/11 Python