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 23 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
Python变量和数据类型详解
Feb 15 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
wxPython实现文本框基础组件
Nov 18 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
关于sys.stdout和print的区别详解
Dec 05 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 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中的Memcache详解
2014/04/05 PHP
PHP常用处理静态操作类
2015/04/03 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
php图片裁剪函数
2018/10/31 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
javascript类型转换示例
2014/04/29 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[01:44]Ti10举办地公布
2019/08/25 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python开发的HTTP库requests详解
2017/08/29 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
基于python实现从尾到头打印链表
2019/11/02 Python
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
银行存款证明样本
2014/01/17 职场文书
村官工作鉴定评语
2014/01/27 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
大学军训口号大全
2015/12/24 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python